pipe()如何识别文件描述符

时间:2014-10-23 15:19:52

标签: linux pipe

我最近在学习linux操作系统。我有一个关于pipe()函数的问题。 如果我定义int fd[2],管道()会自动知道是否已读取fd[0]并且fd[1]是否已写入?

如果我想创建一个双射管,这是否意味着我应该定义两个数组int fd[2]int fd_1[2]?我必须使用'fd'作为数组名称吗?我可以使用其他人吗?

非常感谢!!

2 个答案:

答案 0 :(得分:1)

这是pipe(2)系统调用的定义。成功时,它会填充您传递的数组的两个元素(索引[0]的第一个是读取结束,第二个索引[1]是写入结束)。不要忘记测试错误案例。

您传递给pipe的参数的名称 - 或任何C函数 - 是无关紧要的(特别是因为这些名称只在编译时才知道,而不是在运行时;也可能是某些复杂的指针表达式)。但在运行时它应该是指向两个int - s

的有效内存区域的指针

请阅读Advanced Linux Programming,并养成阅读您正在使用的每项功能的文档的习惯。

另请阅读pipe(7)socketpair(2)fifo(7)syscalls(2)poll(2)

您经常在pipe(2)之前致电fork(2),并且您通常在父亲和子进程中close(2)管道的不同端。

答案 1 :(得分:0)

您必须在进程中关闭读取结束并在另一个进程中关闭写入结束以进行成功的数据传输。 你可以随意命名数组。 据我所知,只有BSD支持某种双向管道。