C语言/Unix系统 Pipe管道

Pipe是Unix系统中使父子进程相互传输数据的方式。由于他在属于unix系统而非c编译器,因此它使用file descriptor (int类型)。

Pipe(fd)

这是一个综合指令,会在系统中打开一个由两个虚拟文件组成的”管道”。两个文件的内容时时刻刻相同,fd[0] 负责读取管道内容,fd[1] 负责写入内容。写入的方式为 First In First Out 。在我们执行 pipe(fd) 命令的同时,系统会执行open命令新建并打开这两个虚拟文件的file descriptor,并将file descriptor的值赋予到fd中。因此,在程序结束之前,我们也需要让系统关闭这两个文件(尽管他们并不能从资源管理器中被看到)。因此最后我们会执行 close 命令。

使用方法:

# 其他代码
# 我们需要在创建子进程前打开pipe,从而使子进程直接复制父进程pipe所指向的file descriptor。

# 用长度为2的int Array表示pipe
int fd[2]

# 执行pipe命令
pipe(fd)

# 创建子进程
child = fork()

# 其他关于不同进程功能的代码
# 在结束之前必须关闭pipe的两个file descriptor
close(fd[0])
close(fd[1])

注意!pipe命令的输入值必须是一个长度为2的数列。

在读Pipe时,如果pipe当前没有可以读的值,read命令则会等到有命令传给pipe的 fd[1] 之后再执行。因此假设parent想要从child中读取pipe内容,我们不必要专门写wait语句等待子进程结束。

这篇文章由本人整理获得,未经允许请勿转载。如有需要,可以直接外链。

Scroll to Top