Javatpoint标志
Javatpoint标志

用C语言演示fork()和pipe()

在接下来的教程中,我们将了解在C编程语言中fork()和pipe()的实现。

让我们开始吧。

fork ()

  • fork()函数用于启动一个新进程。这个子进程是父进程的精确副本。在类unix操作系统上,它是创建新进程的主要技术。
  • 一个被称为“子进程”的新进程是用fork系统函数创建的,并与调用fork()的进程(父进程)同时运行。一旦启动了新的子进程,两个进程都将在fork()系统调用之后执行下一条指令。父进程使用的CPU寄存器、程序计数器和打开的文件也被子进程使用。
  • 它返回一个整数值,不需要参数。fork返回的各种值如下()所示。

管()

  • 可以使用管道,以便一个进程向其写入,另一个进程从中读取。这就是所谓的单向通信。首先打开一个管道,这是主存中作为“虚拟文件”的一部分。
  • 生产进程及其所有子进程都可以在管道上读写。这个“虚拟文件”或管道可以由一个进程写入,并由连接到它的另一个进程读取。
  • 如果进程试图在写入任何内容之前读取,则该进程将停止,直到将任何内容写入管道。
  • 管道的读和写端点给出了管道系统调用在流程打开的文件表中发现的前两个开放位置。

用C语言演示fork()和pipe():

使用C程序创建两个进程P1和P2。P1收到一个字符串后,将它交给P2。P2不使用字符串函数,而是将接收到的字符串连接到另一个字符串,并将结果发送回P1进行打印。

例子:


解释:

我们使用fork来生成一个子进程()。Fork()返回如下信息:0 fail to create child (new) process =0 for child process >0,即父进程的子进程ID。当>0时父进程将运行。

可以使用pipe()函数将信息从一个进程发送到另一个进程。因为pipe()是单向的,所以可以设置两个管道(每个方向一个)来提供进程之间的双向通信。

父进程内部:首先关闭第一个管道的读取端(fd1[0]),然后通过管道的写入端(fd1[1])写入字符串。父进程将等待子进程完成。在子进程结束后,父进程将关闭第二个管道的写入端(fd2[1]),并通过管道的读取端(fd2[0])读取字符串。

在子进程中,子进程通过关闭管道的写端(fd1[1])读取父进程传递的第一个字符串,在读取后连接两个字符串,然后在退出前通过fd2管道将字符串发送给父进程。







Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map