免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 812 | 回复: 0
打印 上一主题 下一主题

模仿popen的pzpopen [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-07 09:52 |只看该作者 |倒序浏览
pzpopen:
返回的是文件描述符

#include unistd.h>
#include stdio.h>
#include sys/types.h>
int pzpopen(char *proc, char *mode) {
    int pipe_d[2];
    pid_t pid;
   
    if(pipe(pipe_d) != 0) {
        fprintf(stderr, "pipe failed!\n");
        return -1;
    }
    if(*mode == 'r' && *(mode + 1) == '\0'){
        pid = fork();
        switch(pid) {
        case -1:
            fprintf(stderr, "fork failed.\n");
            return -1;
        case 0:
            dup2(pipe_d[1], 1);
            close(pipe_d[1]);
            close(pipe_d[0]);
            execl(proc, proc, NULL);
            fprintf(stderr, "execl failed.\n");
            return -1;
        }
        close(pipe_d[1]);
        return pipe_d[0];
    }else if(*mode == 'w' && *(mode + 1) == '\0') {
        pid = fork();
        switch(pid) {
        case -1:
            fprintf(stderr, "fork failed.\n");
            return -1;
        case 0:
            dup2(pipe_d[0], 0);
            close(pipe_d[0]);
            close(pipe_d[1]);
            execl(proc, proc, NULL);
            fprintf(stderr, "execl failed.\n");
            return -1;
        }
        close(pipe_d[0]);
        return pipe_d[1];
    }
    fprintf(stderr, "Unknown mode %s!\n", mode);
    return -1;
}




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/77943/showart_1987956.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP