线程间通信:
#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