管道通信示例

 for printf */
#include <stdio.h>
/* for fork pipe close write read */
#include <unistd.h>
/* for exit */
#include <stdlib.h>


#define MAX_STRING 1024
int main(int argc, char *argv[])
{
        /* 参考pipe函数原型
         * pipefd[0] 代表读端.
         * pipefd[1] 代表写端 */
        int pipefd[2];
        /* 参考fork函数原型 */
        pid_t pid;
        /* 读取数据存放在buf中 */
        char buf[MAX_STRING] = {0};

        /* 如果pipe打开失败,打印信息,并退出 */
        if (pipe(pipefd) != 0) {
                printf("pipe eorror!\n");
                exit(EXIT_FAILURE);
        }

        /* fork子进程 */
        /* 管道只能在具有共同祖先的进程间使用*/
        pid = fork();

        /* 子进程处理 */
        if (pid == 0) {
                /* 关闭读端 */
                /* 管道只能工作在半双工模式下,也即数据只能单向流动*/
                close(pipefd[0]);
                /* 在写端写数据 */
                write(pipefd[1], "hello", 5);
                /* 数据写完关闭 */
                close(pipefd[1]);
                /* 子进程成功退出 */
                exit(EXIT_SUCCESS);
        }

        /* 父进程关闭写端 */
        close(pipefd[1]);
        /* 父进程读取内容到buf中 */
        read(pipefd[0], buf, MAX_STRING);

        /* 打印读取到的内容 */
        printf("buf:%s\n", buf);

        /* 返回 */
        return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值