您的位置:首页 > 运维架构 > Linux

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  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: