进程间的通信方式
(一)管道
同一tab里的互相通信
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#define FIFO "./test.txt"
int main()
{
int fd;
int i = 0;
int status;
pid_t pid;
int info = mkfifo(FIFO, 0666);
if (info < 0)
{
perror ("mkfifo error!");
exit(1);
}
pid = fork();
if(-1 == pid)
{
perror("fork error");
exit(1);
}
if (0 == pid)
{
while(1)
{
fd = open(FIFO, O_WRONLY);
char buf[21] = {0};
printf("please input1:\n");
scanf("%s",buf);
write(fd,buf,strlen(buf));
memset(buf, 0 , sizeof(buf));
sleep(1);
fd = open(FIFO, O_RDONLY);
read(fd,buf,20);
printf("zhangsan dui lisi:%s\n",buf);
memset(buf,0,sizeof(buf));
}
exit(0);
}
else
{
while(1)
{
fd = open(FIFO,O_RDONLY);
char buffer[1024] = {0};
read(fd,buffer,12);
printf("lisi dui zhangsan:%s\n",buffer);
memset(buffer, 0 , sizeof(buffer));
fd = open(FIFO, O_WRONLY);
printf("please input2:\n");
scanf("%s",buffer);
write(fd,buffer,strlen(buffer));
memset(buffer,0 ,sizeof(buffer));
sleep(1);
}
}
return 0;
}
运行结果
不同tab里的互相通信
read.c
write.c
运行结果:
(二) 消息队列
(三)信号量
信号:软中断(程序间信息传递的媒介)
1、ctrl+z:暂停信息
2、ctrl+c:停止信号
3、int kill(pid_t pid,int sig)
信号处理
1、sighandler_t signal(int signum,signhandler_t handler);
信号的编号:signum
信号的处理机制:sighandler
忽略信号:SIG_IGN
信号的直接处理:SIG_DFL