我一直在研究管道,我想知道是否有一种方法可以使用管道在同一进程中进行读写。这是我的代码:
// Creates 2 pipes per child
for (i=0; i<atoi(argv[1]); i++) {
pipe(fd[i]);
}
for(i = 0; i < atoi(argv[1]); i++) {
pid = fork();
//pipe(fd);
int r[2];
int check=0;
srand(getpid());
int** Board=build_board(width);
if(pid < 0) {
printf("Error");
exit(1);
} else if (pid == 0) {
printf("Child (%d): %d\n", i + 1, getpid());
// srand(getpid());
makeMove(Board, 2,r);
printf("Child R: %d:%d\n", r[0],r[1]);
display(Board, width, width);
close(fd[i][0]);
write(fd[i][1], r, sizeof(r));
// play(Board);
exit(0);
} else {
printf("Parent (%d): %d\n", i + 1, getpid());
while (1) {
if (check==0) {
close(fd[i][1]);
read(fd[i][0], readbuffer, sizeof(readbuffer));
printf("Received string: %d:%d\n", readbuffer[0], readbuffer[1]);
Board[readbuffer[0]][readbuffer[1]]=2;
puts("Fixed Board");
display(Board, width, width);
check=checkVictory(Board);
if (check!=0) {
puts("Winner");
display(Board, width, width);
break;
}
//srand(getpid());
AI_move(Board,1,2);
display(Board, width, width);
}
}
wait(NULL);
}
}
我试图在两个进程之间来回发送动作,但是使用我拥有的代码,我从孩子那里得到了第一个动作,然后父母只是移动直到它获胜。我相信在父母搬家后我必须回信给孩子,但我在孩子进程的顶部关闭了这个能力。How 和我都相互沟通,直到找到获胜者以及何时退出。
这是一些示例输出:
Parent (1): 17291
Child (1): 17293
Child laced peice at: 7,3
Child R: 7:3
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - - - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - - - -
Parent placed peice at: 7,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - B - R - -
Parent placed peice at: 6,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B - R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B - R - -
Parent placed peice at: 7,4
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - B R R - -
Parent placed peice at: 7,0
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - - B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - - B R R - -
Parent placed peice at: 7,2
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
R - R B R R - -
Parent placed peice at: 6,2
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - R - - R - -
R - R B R R - -
Parent placed peice at: 5,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Parent placed peice at: 4,5
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Received string: 7:3
Fixed Board
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -
Winner
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - R - -
- - - - - R - -
- - R - - R - -
R - R B R R - -