日期:2014-05-16 浏览次数:20636 次
线程间通信:
#include <stdio.h> // printf #include <stdlib.h> // exit #include <unistd.h> // pipe #include <string.h> // strlen #include <pthread.h> // pthread_create using namespace std; void *func(void * fd) { printf("write fd = %d\n", *(int*)fd); char str[] = "hello everyone!"; write( *(int*)fd, str, strlen(str) ); } int main() { int fd[2]; char readbuf[1024]; if(pipe(fd) < 0) { printf("pipe error!\n"); } // create a new thread pthread_t tid = 0; pthread_create(&tid, NULL, func, &fd[1]); pthread_join(tid, NULL); sleep(3); // read buf from child thread read( fd[0], readbuf, sizeof(readbuf) ); printf("read buf = %s\n", readbuf); return 0; }
// 输出结果
write fd = 4 read buf = hello everyone!?
#include <stdio.h> // printf #include <stdlib.h> // exit #include <unistd.h> // pipe #include <string.h> // strlen #include <pthread.h> // pthread_create using namespace std; int main() { int fd[2]; int pid = 0; char str[] = "hello"; char readbuf[1024]; if(pipe(fd) < 0) { printf("pipe error!\n"); } if((pid = fork()) < 0) { printf("fork error!\n"); } else if(pid == 0) { printf("child process!\n"); // close read channel close(fd[0]); write(fd[1], str, strlen(str)); } else { printf("father process!\n"); // close write channel close(fd[1]); read(fd[0], readbuf, sizeof(readbuf)); printf("readbuf = %s\n", readbuf); } return 0; }
// 输出结果:
father process! child process! readbuf = hello