我最近在学习linux操作系统。我有一个关于pipe()函数的问题。
如果我定义int fd[2]
,管道()会自动知道是否已读取fd[0]
并且fd[1]
是否已写入?
如果我想创建一个双射管,这是否意味着我应该定义两个数组int fd[2]
和int fd_1[2]
?我必须使用'fd'作为数组名称吗?我可以使用其他人吗?
非常感谢!!
答案 0 :(得分:1)
这是pipe(2)系统调用的定义。成功时,它会填充您传递的数组的两个元素(索引[0]
的第一个是读取结束,第二个索引[1]
是写入结束)。不要忘记测试错误案例。
您传递给pipe
的参数的名称 - 或任何C函数 - 是无关紧要的(特别是因为这些名称只在编译时才知道,而不是在运行时;也可能是某些复杂的指针表达式)。但在运行时它应该是指向两个int
- s
请阅读Advanced Linux Programming,并养成阅读您正在使用的每项功能的文档的习惯。
答案 1 :(得分:0)
您必须在进程中关闭读取结束并在另一个进程中关闭写入结束以进行成功的数据传输。 你可以随意命名数组。 据我所知,只有BSD支持某种双向管道。