LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 808|回复: 6

管道的使用问题(高级)

[复制链接]
发表于 2007-7-13 19:51:34 | 显示全部楼层 |阅读模式
管道可以在父进程与子进程间传输数据。这个已经验证了。但是子进程如果通过exec()调用启动另外一个程序,如何通讯呢?
这个问题很难啊,请高手赐教!
发表于 2007-7-13 20:42:54 | 显示全部楼层
子进程exec的那个程序会从哪里读数据?
假设从标准输入里读数据,那么在子进程里把管道读端的文件描述符复制到标准输入,然后exec即可。

PS,这个发到C编程版会更合适一点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 21:08:42 | 显示全部楼层
非常感谢你的说明,能够再详细一点么?
回复 支持 反对

使用道具 举报

发表于 2007-7-13 21:31:31 | 显示全部楼层
不知道你有没有一本书叫“UNIX环境高级编程”,上面的管道方面的知识就是你想问的详细解答。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 22:10:02 | 显示全部楼层
int main(){
FILE * Outfile;
char buf[20];
    printf("open file!\n");
    Outfile=fopen("DataToGps","w");
        if(Outfile==NULL){
                perror("Error in foprn!");
                exit(1);
        }
        printf("file opened!\n");
    pid_t fork1,fork2;
    fork1=fork();
        if(fork1<0){
                printf("fork1 creat erro!\n");
               
        }
        else{
                if(fork1!=0){
                        fork2=fork();
                if(fork2<0){
                        printf("fork2 creat erro!\n");
                }
                else{
                                if(fork2==0){
                                         printf("fork1 creat ok! ID:%d \n",getpid());
                             execl("./fork2","fork2",0);
                                 perror("exec error");
                                }
                                else{
                            printf("fork ok! ID:%d \n",getpid());
                                        fwrite("tEST DATA!",1,8,Outfile);
                                        //write(DataToGps[OUTPUT],"test data!\n",strlen("test data!"));
                    }
                }
                }
                else{
                        //close(DataToGps[OUTPUT]);
                        //read(DataToGps[INPUT],buf,20);
                    printf("fork1 creat ok! ID:%d  \n",getpid());
                        execl("./fork1","fork1",0);
                        perror("exec error");
                }
        }
        while(1){;}
}
通过这个管道:会在 Outfile=fopen("DataToGps","w");
后阻塞,请问有什么解决方法么?
回复 支持 反对

使用道具 举报

发表于 2007-7-13 22:13:42 | 显示全部楼层
请编辑一下代码,然后把缩进处理一下。
如果你不知道怎么贴代码用

[PHP][CODE][/CODE][/PHP]
把代码包括起来

这样看着实在头晕
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 22:24:09 | 显示全部楼层
有QQ么?我们直接交流好么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表