【发布时间】:2014-10-23 15:19:51
【问题描述】:
我最近在学习 linux 操作系统。我对 pipe() 函数有疑问。
如果我定义了一个int fd[2],pipe() 是否会自动知道fd[0] 被读取而fd[1] 被写入?
如果我想创建一个双射管道,这是否意味着我应该定义两个数组int fd[2] 和int fd_1[2]?我必须使用“fd”作为数组名称吗?我可以用别人吗??
非常感谢!!
【问题讨论】:
我最近在学习 linux 操作系统。我对 pipe() 函数有疑问。
如果我定义了一个int fd[2],pipe() 是否会自动知道fd[0] 被读取而fd[1] 被写入?
如果我想创建一个双射管道,这是否意味着我应该定义两个数组int fd[2] 和int fd_1[2]?我必须使用“fd”作为数组名称吗?我可以用别人吗??
非常感谢!!
【问题讨论】:
这是pipe(2) 系统调用的定义。成功时,它会填充您传递给它的数组的两个元素(索引[0] 的第一个元素是读取端,索引[1] 的第二个元素是写入端)。不要忘记针对错误情况进行测试。
您传递给 pipe 或任何 C 函数的参数的名称无关紧要(特别是因为这些名称仅在编译时知道,而不是在运行时知道;它也可能是一些复杂的指针表达式)。但是在运行时它应该是一个指向两个int-s的有效内存区域的指针
请阅读Advanced Linux Programming,并养成阅读您正在使用的每个函数的文档的习惯。
【讨论】:
pipe 数千次)。
您必须在一个进程中关闭读取端并在另一个进程中关闭写入端才能成功完成数据传输。 您可以随意命名数组。 据我所知,只有 BSD 支持某种双向管道。
【讨论】: