《Linux》Linux下使用fork()函数实现进程通信

**进程的概念:**进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
**进程通信的概念:**进程通信指的是在进程之间传输数据
**进程通信的种类:**管道通信、信号通信、信号量通信、共享内存通信、消息队列通信、套接字通信
**管道通信:**通过使用pipe()函数创建管道,然后使用fork()函数创建一个子进程的管道,关闭两个管道之中的一个读口和一个写口,使用剩下的一个读口和一个写口实现进程之间的通信
**fork()函数:**fork()函数每次被调用的时候就会创建一个子进程,然后返回的是进程的id,父进程返回的是子进程的id,子进程返回的是0,如果创建失败则返回负值
**pipe()函数:**用于创建管道,int pipe(int filedes[2]);并且将文件描述词由参数filedes返回,管道有两个端口,一个是写端口filedes[1],一个是读端口filedes[0],通过write(端口参数,写入内容,写入大小)写入端口,通过read(端口参数,读出内容,读出大小)读出端口

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
	int n,fd[2];
	pid_t pid;
	char line[1024];
	if (pipe(fd)<0)//创建管道,如果管道返回值小于0,那么就是创建管道失败,返回1
		return 1;
	if ((pid=fork())<0)//使用fork()函数创建子进程,若是fork()的返回值小于0,则创建失败
		return 1;
	else if (pid>0)	//如果返回值大于0,则代表创建成功,并且运行的是父进程
	{
		close(fd[0]);	//关闭父进程的读端口
		printf("father process is running");
		write(fd[1],"I am from parent!\n",19);	//然后将字符串写入父进程的写端口
	}
	else//若是pid==0,那么就是创建子进程成功,并且执行的是子进程
	{
		close(fd[1]);	//关闭子进程的写端口
		n=read(fd[0],line,1024);	//从子进程的读端口之中读出字符串
		printf("%s%d\n",line,n);
	}
	printf("I am public!\n");
	return 1;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值