gpt4 book ai didi

c - 管道时,为什么在使用 dup2() 之前必须关闭() 管道的另一端?

转载 作者:行者123 更新时间:2023-12-05 01:47:16 24 4
gpt4 key购买 nike

在此代码示例中,我注意到在写入之前必须关闭管道读取缓冲区的另一端,反之亦然。为什么会这样?如果不关闭另一端,会有什么样的后果或副作用?

int main() {
char b[20];
int p[2];
int rc = pipe( p );
int pid = fork();

if ( pid > 0 ) {
close( p[0] );
rc = dup2( p[1], 1 );
}

printf( "0987654321" );
fflush( NULL );

if ( pid == 0 ) {
close( p[1] );
rc = read( p[0], b, 6 );
b[rc] = '\0';
printf( "%d-%s\n", getpid(), b );
}
return EXIT_SUCCESS;
}

最佳答案

您必须关闭两端,以便只有一个 fork 进程尝试从管道读取数据。为了对称,关闭管道的输入端是个好主意。

这样做的另一个原因是防御性编程。最终,您必须关闭管道,否则您将泄漏文件句柄。如果您不需要它们,请立即关闭它们,以免您以后忘记这样做。

关于c - 管道时,为什么在使用 dup2() 之前必须关闭() 管道的另一端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067335/

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