一起talk C栗子吧(第八十九回:C语言实例--使用

页面导航:首页 > 软件编程 > C 语言 > 一起talk C栗子吧(第八十九回:C语言实例--使用

一起talk C栗子吧(第八十九回:C语言实例--使用

来源: 作者: 时间:2016-01-25 09:50 【

各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让

各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让我们一起talk C栗子吧!

我们在前面章回中介绍了三种管道,这一回我们介绍第二种管道及其使用方法。最主要还是让大家明白如何使用管道进行进程间的通信。

第二种管道我称之为入门级管道。在介绍它之前,我们先介绍一个函数:pipe.

pipe函数的原型

int pipe(int file_descriptor[2])
该函数用来创建管道,并且得到两个文件描述符供我们使用; 该函数只有一个参数,参数为int类型的数组,数组中有两个元素。两个元素都是文件描述符; 管道通过第二个元素指向的文件把数据写入管道,并且通过第一个元素指向的文件从管道中读取数据; 该函数执行成功时返回0,否则返回-1,并且修改errno的值,不同的值代表不同的错误。

pipe函数的使用方法

明白这个函数后,我们接下来介绍入门级管道的使用方法,详细内容如下:

1.使用pipe函数创建管道,并且得到两个文件描述符; 2.在子进程中使用write系统调用通过第二个文件描述符向管道中写入数据; 3.在父进程中使用read系统调用通过第一个文件描述符从管道中读取数据;

我们接下来使用具体的例子进行说明,下面是详细的代码

int main()
{
    char input[] = "IPC by pipe";
    char output[BUFSIZ+1];
    int fd_pipe[2];
    int count = 0;
    int stat_value;
    pid_t pid,pid_res;

    memset(output,'\0',sizeof(output));

    if(pipe(fd_pipe) == 0)     //创建管道
    {
        pid = fork();
        if(pid > 0)
        {
            pid_res = wait(&stat_value);

            if(pid_res > 0)
            {
                count = read(fd_pipe[0],output,BUFSIZ);      //从管道中读取数据
                printf("father process read %d characters,they are: %s \n",count,output);
            }
        }
        else if(pid == 0)
        {
            count = write(fd_pipe[1],input,strlen(input));  //向管道中写入数据
            printf("son process write %d characters,they are : %s \n",count,input);
        }
        else
        {
            printf("create process failed \n");
            return 1;
        }
    }

    return 0;
}

从上面的代码中我们可以看到:

首先是在子进程中使用write向管道中写入数据,写入数据是通过第二个文件描述符来实现的。 接着在父进程中使用read从管道中读取数据,读取数据是通过第一个文件描述符来实现的。 在父进程中我们还使用了wait来同步进程,以确保子进程向管道中写入数据后,父进程再从管道中读取数据。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以使用。

下面是程序的运行结果,请大家参考

./s                                                        //运行编译后的程序
son process write 11 characters,they are : IPC by pipe     //子进程向管道中写入数据
father process read 11 characters,they are: IPC by pipe    //父进程从管道中读取数据

各位看官,关于使用管道进行进程间通信的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<