进程的概念:进程(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;
}