int n,fd1[2],fd2[2];
pid_t pid = 0;
char line[MAXLINE];
if(signal(SIGPIPE, sig_pipe) == SIG_ERR)
{
perror("signal() error");
exit(-1);
}
if(pipe(fd1) == -1 || pipe(fd2) == -1)
{
perror("pipe() error");
exit(-1);
}
if((pid = fork()) == -1)
{
perror("fork() error");
exit(-1);
}
if(pid == 0)
{
close(fd1[1]);
close(fd2[0]);
if(fd1[0] != STDIN_FILENO)
{
if(dup2(fd1[0],STDIN_FILENO) != STDIN_FILENO)
{
perror("dup2 error in stdin");
close(fd1[0]);
exit(-1);
}
}
if(fd2[1] != STDOUT_FILENO)
{
if(dup2(fd2[1],STDOUT_FILENO) != STDOUT_FILENO)
{
perror("dup2 error in stdout");
close(fd2[1]);
exit(-1);
}
}
if(execl("/Users/hanoi/Desktop/nanocom",(char *)0) == -1)
{
perror("execl() error");
exit(-1);
}
}
else
{
close(fd1[0]);
close(fd2[1]);
printf("Enter two number: ");
while(fgets(line,MAXLINE,stdin) != NULL)
{
n = (int)strlen(line);
if(write(fd1[1],line,n) != n)
{
perror("write errot to pipe");
exit(-1);
}
if((n=(int)read(fd2[0],line,MAXLINE)) ==-1)
{
perror("read error to pipe");
exit(-1);
}
if(n== 0)
{
printf("child close pipe.\n");
break;
}
line[n] = '\0';
printf("The result is: ");
fputs(line,stdout);
}
}
进程之间的通信
最新推荐文章于 2022-08-23 20:17:20 发布