代码:
#include <stdio.h> #include <errno.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <termios.h> #include <sys/stat.h> #include <sys/types.h> #include <utils/Log.h> #include <cutils/sockets.h> #include <time.h> #include <cutils/properties.h> #define BUF_SIZE 30 int main(void) { int socket_pair[2]; char * string_1 = "abcdefghijk"; char * string_2 = "ABCDEFGHIJK"; char * buf = (char*)calloc(1 , BUF_SIZE);//need to check memory allocation errors! pid_t ret_val; pid_t pid_parent = -1; pid_t pid_child = -1; /*============ socketpair init ============*/ if(-1 == socketpair(AF_UNIX,SOCK_STREAM,0,socket_pair)) { printf("create unnamed socket pair failed:%s\n",strerror(errno)); exit(-1); } /*============ fork a new process ============*/ ret_val = fork(); if(ret_val < 0) { printf("Fork failed:%s\n", strerror(errno)); exit(-1); } if(ret_val > 0) { pid_parent = getpid(); printf("this is the PARENT process (pid=%4d)\n", pid_parent); } else { pid_child = getpid(); printf("this is the CHILD process (pid=%4d)\n", pid_child); //close(s[0]); } /*============ the work of each process ============*/ if(pid_parent == getpid()) {// the parent process int i = 0; char* p = NULL; p = string_1; close(socket_pair[1]); while(i<10) { printf(" PARENT: sleep...\n"); sleep(2); printf(" PARENT: awake...\n"); printf(" PARENT: writing...\n"); if((write(socket_pair[0] , p , 1)) == -1 ) { printf(" PARENT: write to socket_pair[0] ERROR: %s\n", strerror(errno)); exit(-1); } else { printf(" PARENT: write to socket_pair[0]: %c\n", *p); } printf(" PARENT: reading...\n"); if((read(socket_pair[0] , buf , BUF_SIZE)) == -1 ) { printf(" PARENT: read from socket_pair[0] ERROR: %s\n", strerror(errno)); exit(-1); } else { printf(" PARENT: read from socket_pair[0]: %s\n", buf); } i++; p++; } printf(" PARENT: exit\n"); } else if(pid_child == getpid()) {// the child process int i = 0; char* p = NULL; p = string_2; close(socket_pair[0]); while(i<10) { printf("CHILD: reading...\n"); if((read(socket_pair[1] , buf , BUF_SIZE)) == -1 ) { printf("CHILD: read from socket_pair[1] ERROR: %s\n", strerror(errno)); exit(-1); } else { printf("CHILD: read from socket_pair[1]: %s\n", buf); } printf("CHILD: writing...\n"); if((write(socket_pair[1] , p , 1)) == -1 ) { printf("CHILD: write to socket_pair[1] ERROR: %s\n", strerror(errno)); exit(-1); } else { printf("CHILD: write to socket_pair[1]: %c\n", *p); } printf("CHILD: sleep...\n"); sleep(2); printf("CHILD: awake...\n"); i++; p++; } printf("CHILD: exit\n"); } exit(0); }