首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >read(...):read会记得这个变化吗?

read(...):read会记得这个变化吗?
EN

Stack Overflow用户
提问于 2019-03-18 11:30:59
回答 1查看 25关注 0票数 0
代码语言:javascript
复制
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中复制的描述,我有一个问题要问“文件位置提前了这个数字”这句话。

我想在我的代码中做的事情如下:

代码语言:javascript
复制
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将假设没有发生任何事情,并从初始开始位置而不是新的开始位置读取?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 11:46:09

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55214391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档