#include #include #include #define N_PROCESS 2 #define MAXLINE 80 #define MAXDIGITNUM 16 void charArray_reverse(char* b, int count) { char tmp; int i; for ( i = 0; i <= count/2 - 1; i++ ) { tmp = b[i]; b[i] = b[count - i -1]; b[count - i -1] = tmp; } } int int_to_charArray(int a, char* b, int b_len) { int i = a % 10; int count = 0; // printf("a is %d\n", a); for ( ; a != 0 && count < b_len; a /= 10 ) { i = a % 10; b[count++] = '0' + i; } // printf("count is %d\n", count); if ( count >= b_len && a != 0 ) return -1; charArray_reverse(b, count); return count; } int main() { pid_t pid[N_PROCESS]; int i; int status; int fd[2]; char line[MAXLINE]; char line1[MAXLINE]; char charArray[MAXDIGITNUM]; if ( pipe(fd) < 0 ) { perror("pipe fail"); exit(0); } // have not check whether fork() is successful /* create child process */ for (i = 0; i < N_PROCESS; i++) { if ((pid[i] = fork()) == 0) { printf("in child %d\n", getpid()); break; /* 让子进程退出 */ } } // printf("\n\nI am sleeping for 2 seconds...\n\n"); // sleep(2); if ( pid[0] > 0 && pid[1] > 0 ) { printf("in parent\n"); sleep(4); exit(50); } if ( pid[0] == 0 ) { printf("for child 0, pid[1] is %d\n", pid[1]); sleep(2); int n = read(fd[0], line, MAXLINE); // printf("Hi pid1, I get your pid now, thank you!\n"); write(STDOUT_FILENO, line, n); write(fd[1], "Hi pid1, I get your pid now, thank you!\n", 40); exit(0); } if ( pid[1] == 0 ) { printf("for child 1, pid[0] is %d\n", pid[0]); int child1Pid = getpid(); write(fd[1], "Hi, pid0, I know you don't know my pid, so I will tell you that. My pid is: ", 66); int charArrayLen = int_to_charArray(child1Pid, charArray, MAXDIGITNUM); // printf("char array len is %d\n", charArrayLen); if ( charArrayLen == -1 ) { write(fd[1], "pid id to large", 4); } else { write(fd[1], charArray, charArrayLen); write(fd[1], "\n", 1); sleep(4); int n = read(fd[0], line1, MAXLINE); // printf("Hi pid1, I get your pid now, thank you!\n"); write(STDOUT_FILENO, line1, n); } exit(1); } return 0; }