通过管道实现两个进程间的通信
代码
readfifo.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<string.h>
#include<errno.h>
#define FIFO "./text.txt"
int main()
{
pid_t pid;
int ret;
char buffer[100];
if((ret=mkfifo(FIFO,0644))<0)
{
if(ret==-1 && errno == EEXIST)
{
}
else
{
perror("make mkfifo error!");
exit(1);
}
}
int fd=open(FIFO, O_RDONLY);
while(1)
{
memset(buffer,0,sizeof(buffer));
read(fd,buffer,sizeof(buffer));
printf("recive: %s\n",buffer);
sleep(2);
}
return 0;
}
writefifo.c
代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<string.h>
#include<errno.h>
#define FIFO "./text.txt"
int main()
{
pid_t pid;
char buffer[100];
int ret;
/*if((ret = mkfifo(FIFO,0644))<0)
{
if(ret == -1 && errno == EEXIST)
{
}
else
{
perror("make mkfifo error!");
exit(1);
}
}*/
int fd=open(FIFO, O_WRONLY);
while(1)
{
memset(buffer,0,sizeof(buffer));
scanf("%s",buffer);
write(fd,buffer,strlen(buffer));
}
return 0;
}
运行结果
进程间不能用全局变量来通信
原因:使用的内存空间是不共用的,不同的虚拟内存空间,有各自的地址空间
线程:
什么是线程