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(pipe_fd[1][0], &contribution, sizeof(int))
,据我了解,我知道read将从管道中读取sizeof(int)字节,并以某种方式使用fseek调用或类似方法移动sizeof(int )字节到下一个新的起始位置。但是,当我循环浏览并再次将其更改回read(pipe_fd [1] [0])时,阅读会记住它的最后一个起始位置吗? (在第一次读取调用之后,即是我在上面描述的新的起始位置),否则读取将仅假设什么都不会发生,而是从初始起始位置而不是新的起始位置进行读取?
答案 0 :(得分:0)
管道没有文件位置,但是read(2)
将以相同的顺序(先进先出)为您提供所有写入管道另一端的数据。下次在同一fd上调用read()
时,您将获得跟随该fd上一次调用得到的数据。通常这就是您想要的,并且您之间不需要做任何特殊的事情。