转自:http://blog.csdn.net/robertkun/article/details/8095331
线程间通信:
- #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