gpt4 book ai didi

c - 测验中 fork 和管道的混淆

转载 作者:行者123 更新时间:2023-11-30 17:15:52 24 4
gpt4 key购买 nike

这是我类里面的一个测验,涉及 fork 和管道的概念。我只是对这段代码有一些困惑。

1) if((pid = fork() == 0) 是什么意思?它只是使用 pid(进程 ID) 检查 fork,为什么循环以此开始?

2)关闭(p[1]);这部分是什么意思?关闭数组 P 的第一个整数?

3)while循环在close后开始,是否意味着如果p[0]不为零,它会读取它的大小?

4.这两行写的是什么意思,为什么都命名为1?它们是同时发生的吗?

#include <stdio.h>
#include <stdlib>
#include <string.h>
#include <sys/wait.h>



int main(int argc, char *argv[])
{

int p[2];

int i, pid, status;
char buffer[20];
pipe(p);
if((pid = fork() == 0) {

close (p[1]);
while (( i = read (p[0], buffer, sizeof("abcdefghi"))) != 0)
{ buffer [i] = '\0';
printf("read %d bytes: %s\n", i, buffer);

}
close(p[0]);
exit (0);
}

write(p[1], "abcdefghi', sizeof("abcdefghi"));

write(p[1], "123456789', sizeof("123456789"));

close(p[0]);
close(p[1]);
while(wait(&status)!= pid);
return(0);
}

最佳答案

你确实应该 RTFM,但是:-

  1. fork() 创建从同一行代码运行的当前过程的相同副本。两个副本之间的唯一区别是 fork() 的返回码。如果您位于新创建的副本中,则该值为 0;如果您位于原始可执行文件中,则为新创建副本的进程 ID(如果出现问题,则为 -1)。

  2. pipe(p) 创建一个管道并在数组“p”中返回两个文件句柄。第一个句柄是打开用于读取的管道的输出,第二个句柄是打开用于写入的管道的输入。因此 close(p[1]) 关闭管道的输入(这是在从管道读取的新进程中,关闭不使用的文件描述符被认为是很好的做法!)

  3. while 循环正在检查“i”从管道文件读取的返回代码,当没有任何内容可读取时,这将返回 0。

关于c - 测验中 fork 和管道的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838592/

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