我对pipe(),fork()函数和/ bin还是很陌生。我想通过第一个孩子到第二个孩子的管道传递一个值,以后将用它来更改该值。但是,我认为,如果我在第二个孩子中做line
而只做line++
,那就可以了。但是,line
将成为共享值。因此,我使用/bin/cat
来正确调出标准输出,但似乎无法正常工作。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<string.h>
#include<sys/wait.h>
#include<stdio.h>
#include<unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define READ_END 0
#define WRITE_END 1
int fd1[2];
char line[100];
int main()
{
int line = 1;
char *args[] = {"/bin/cat",NULL};
//child 1 process
if(fork() == 0)
{
close(fd1[READ_END]);
dup2(fd1[WRITE_END], WRITE_END);
printf("Num 1: %d\n", line);
close(fd1[WRITE_END]);
exit(0);
}
// child 2 process
if (fork() == 0)
{
close(fd1[WRITE_END]);
line++;
dup2(fd1[READ_END], READ_END);
printf("Num 2: %d\n", line);
close(fd1[READ_END]);
execv("/bin/cat",args);
exit(0);
}
else if(fork() != 0);
// Write input string and close writing end of first pipe.
close(fd1[READ_END]);
close(fd1[WRITE_END]);
exit(0);
return 0;
}
我的输出是:
Num 1: 1
Num 2: 2
/bin/cat: -: Bad file descriptor
/bin/cat: closing standard input: Bad file descriptor