首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

关于在《LINUX C编程实战》这本书上的一个关于管道的程序有关问题

2013-04-21 
关于在《LINUX C编程实战》这本书上的一个关于管道的程序问题在书上有一个2段程序 是用管道实现父子进程的通

关于在《LINUX C编程实战》这本书上的一个关于管道的程序问题
在书上有一个2段程序 是用管道实现父子进程的通信,以下是代码:
**/monitor.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int arg,char *argv[],char ** environ)
{
    int fd[2];
    pid_t pid;
    int stat_val;
    if(pipe(fd)){
       perror("pipe failed\n");
       exit(1);
    }
    pid=fork();
    switch(pid){
        case -1:
           perror("fork failed\n");
           exit(1);
        case 0:
           close(fd[1]);
           dup2(fd[0],0);
           execve("ctrlprocess",(void *)argv,environ);
           exit(0);
        default:
           close(fd[0]);
           write(fd[1],"test",4);
           break;
      }
      wait(&stat_val);
      exit(0);
}



***/ctrlprocess.c
#include <stdio.h>
#include <unistd.h>
int main(int arg,char *argv[])
{
    int n;
    char buf[1024];
             n=read(stdin,buf,1024);
             if(n>0){
                buf[n]='\0';
                printf("%s%d\n",buf,n);
                sleep(1);
                exit(0);
             }
             printf("failed\n");
             sleep(1);
             exit(1);
}
这是自己简化后的程序 ,基本没改变什么
编译通过,但运行的时候ctrlprocess里面的read返回的都是1677725,貌似是-1,也就是错误 。
这是什么?
谁能给个详细点的解释?

[解决办法]

 n=read(stdin,buf,1024);
改成
 n=read(0,buf,1024);
就ok了

热点排行