linux 进程和线程或线程和线程之间通过管道通信(pipe)
2016-03-10 15:27
429 查看
linux 进程和线程或线程和线程之间通过管道通信(pipe)
转自:http://blog.csdn.net/robertkun/article/details/8095331线程间通信:
[cpp] view
plain copy
#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;
}
[cpp] view
plain copy
// 输出结果
[cpp] view
plain copy
write fd = 4
read buf = hello everyone!�
进程间通信:
[cpp] view
plain copy
#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;
}
[cpp] view
plain copy
// 输出结果:
[cpp] view
plain copy
father process!
child process!
readbuf = hello
相关文章推荐
- 一个网卡配置多个ip配置实现,centos7系统
- centos上的KVM安装
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- Linux: Processes Management Command (ps -ef, kill, netstat -apn)
- CentOS6.5安装最新版 firefox
- Linux下编译ffmpeg并用GDB调试
- [置顶]Linux碎碎念
- 用十条命令在一分钟内检查Linux服务器性能
- CentOS 7下MySQL服务启动失败的解决思路
- Linux系统硬链接和软链接
- CentOS开机无法进入系统,如何查错
- CentOS 7中如何安装mysql server
- Linux 上的Expect
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件
- linux 安装SVN
- Linux命令之diff