read(...):阅读会记住更改吗?

时间:2019-03-18 03:30:59

标签: c linux pipe

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])时,阅读会记住它的最后一个起始位置吗? (在第一次读取调用之后,即是我在上面描述的新的起始位置),否则读取将仅假设什么都不会发生,而是从初始起始位置而不是新的起始位置进行读取?

1 个答案:

答案 0 :(得分:0)

管道没有文件位置,但是read(2)将以相同的顺序(先进先出)为您提供所有写入管道另一端的数据。下次在同一fd上调用read()时,您将获得跟随该fd上一次调用得到的数据。通常这就是您想要的,并且您之间不需要做任何特殊的事情。