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;
}

猜你喜欢

转载自blog.csdn.net/FZUMRWANG/article/details/82703847
今日推荐