gpt4 book ai didi

c - 管道,当父关闭 fd[1] 时,子将从 fd[0] 中得到什么?

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

#define STACK_SIZE (1024 * 1024)

static char container_stack[STACK_SIZE];
char* const container_args[] = {
"/bin/bash",
NULL
};

int pipefd[2];

...

int container_main(void* arg)
{

...

char ch;
close(pipefd[1]);
read(pipefd[0], &ch, 1);

printf("Get EOF [%d] from parent!\n", ch);

...

execv(container_args[0], container_args);
printf("Something's wrong!\n");
return 1;
}

int main()
{
...

pipe(pipefd);

printf("Parent [%5d] - start a container!\n", getpid());

int container_pid = clone(container_main, container_stack+STACK_SIZE,
CLONE_NEWUTS | CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWUSER | SIGCHLD, NULL);


...

close(pipefd[1]);

...
return 0;
}

因此,在父进程中,我close(pipefd[1]);,然后,如果我从read(pipefd[0], &ch, 1);读取> 在子进程中,我将继续在子进程中工作。这是有道理的。

但是当我打印ch的值时,是0,我想应该是-1,也就是EOF。

那么谁能告诉我为什么我在子节点而不是 EOF 中从 fd[0] 读取 0

最佳答案

read()EOF 上返回 0...它返回 -1 错误,所以如果管道的另一端关闭,您希望 read 返回 0 而根本不修改 ch。

那是我的错误,我希望将 EOF 打印到 -1 但是 read() 已经处理了 EOF 并返回了 0

感谢 Dmitri 和 William Pursell

关于c - 管道,当父关闭 fd[1] 时,子将从 fd[0] 中得到什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691065/

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