On success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number.这是我从man 2中复制的描述,我有一个问题要问“文件位置提前了这个数字”这句话。
我想在我的代码中做的事情如下:
for (int i = 1; i < argc; i++) {
if (read(pipe_fd[i-1][0], &contribution, sizeof(int)) == -1) {
perror("reading from pipe from a child");
exit(1);
}
if (i == argc){
i = 1;
}
}我试图重复地从连接每个子进程和父进程的管道中读取数据,我对这篇文章的问题是:当我下次再次调用read时,read会记住它应该继续读取的时间吗?
例如,假设我正在调用read(pipe_fd[1][0], &contribution, sizeof(int)),根据我在这里的理解,我知道read将从管道中读取sizeof(整数)字节,并以某种方式使用fseek调用或类似的方法将sizeof(int)字节移动到下一个新的开始位置。但是,当我循环遍历,并再次将I改回read(pipe_fd1)时,read会记得它的最后一个起始位置吗?(这是在第一个read调用之后,我上面描述的新的开始位置)或read将假设没有发生任何事情,并从初始开始位置而不是新的开始位置读取?
发布于 2019-03-18 11:46:09
管道没有文件位置,但read(2)将以相同的顺序(先入先出)提供写入管道另一端的所有数据。下一次在同一个fd上调用read()时,您将获得上一次在该fd上调用时获得的数据。这通常是您想要的,并且您不需要在两者之间做任何特殊的事情。
https://stackoverflow.com/questions/55214391
复制相似问题