1.管道
使用管道的方法很简单,需要通过pipe()函数创建一个管道就可以使用了。pipe(0函数的定义如下:
#include <unisted.h>
int pipe(int filedes[2]);
参数filedes返回两个文件描述符,filedes[0]为读打开,filedes[1]为写打开。当创建管道成功时pipe()返回的0,如果创建失败会返回-1。
进程间的管道有两个限制:
一个管道只能在一个方向上传递数据,另一个是管道只能在有共同父进程的进程间使用。
通常,管道由一个进程创建,之后进程调用 fork()创建新的进程,父进程和子进程之间就可以使用管道通信了。
进程间通过管道通信
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int fd[2];
pid_t pid;
char buf[64]="I'm child prcess!/n"; //子进程要写入管道的信息
char line[64];
if(0!=pipe(fd)) //创建管道并检查结果
{
fprintf(stderr,"Fail to create pipe!/n");
return 0;
}
pid=fork(); //创建进程
if(pid<0) //创建进程失败
{
fprintf(stderr,"Fail to create process!/n");
return 0;
}
else if(0==pid) //子进程
{
close(fd[0]); //关闭读管道,使得子进程只能向管道写入数据
write(fd[1],buf,strlen(buf)); //写数据到通道
close(fd[1]); //关闭写通道
}
else{ //父进程
close([fd[1]); //关闭写通道,使得父进程只能从管道读取数据
read(fd[0],line,64); //从管道读取数据
printf("DATA From Child:%s",line);
close(fd[0]); //关闭读管道
}
return 0;
}
2.共享内存
共享内存在使用之前需要先创建,之后获得共享内存的入口地址就可以对共享内存进行操作了。