線程間通訊:
#include <stdio.h> // printf#include <stdlib.h> // exit#include <unistd.h> // pipe#include <string.h> // strlen#include <pthread.h> // pthread_createusing 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 = 4read buf = hello everyone!�
處理序間通訊:
#include <stdio.h> // printf#include <stdlib.h> // exit#include <unistd.h> // pipe#include <string.h> // strlen#include <pthread.h> // pthread_createusing 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