gpt4 book ai didi

c - 读(...): Will read remember the change?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:38 26 4
gpt4 key购买 nike

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(int)来自管道的字节,并以某种方式使用 fseek 调用或类似的东西将 sizeof(int) 字节移动到下一个新的起始位置。但是当我遍历并再次将 i 改回 read(pipe_fd[1][0]) 时, read 会记住它的最后一个起始位置吗? (这是在第一个 read 调用之后,我上面描述的新起始位置)或者 read 会假设什么都没有发生并从初始起始位置而不是新起始位置读取?

最佳答案

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

关于c - 读(...): Will read remember the change?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55214391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com