#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<errno.h>
#include<fcntl.h>
int main(int argc,const char *argv[])
{
//创建两个管道文件
if(mkfifo("fifo1",0775) < 0)
{
if(17 != errno)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("fifo2",0775) < 0)
{
if(17 != errno)
{
perror("mkfifo");
return -1;
}
}
printf("allfifo create success \n");
char buf[128]="";
ssize_t res = 0;
//创建两个进程
pid_t cpid = fork();
//父进程
if(cpid > 0)
{
int fd_w = open("fifo1",O_RDONLY);
if(fd_w < 0)
{
perror("open");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));
printf("请输入>>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;//gets补充的\n转换为\0
if(0 == strcmp(buf,"quit"))
break;
if(write(fd_w,buf,sizeof(buf)) < 0)
{
perror("write");
return -1;
}
}
//kill(cpid,9);
close(fd_w);
}
//子进程
else if(0 == cpid)
{
printf("this is childprocess \n");
int fd_r = open("fifo1",O_WRONLY);
if(fd_r < 0)
{
perror("open");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));
res = read(fd_r,buf,sizeof(buf));
if(res < 0)
{
perror("read");
return -1;
}
else if(0 == res)
{
printf("进程退出\n");
break;
}
else
{
printf("res = %ld , buf = %s \n",res,buf);
}
}
close(fd_r);
}
else
{
perror("fork");
return -1;
}
return 0;
}
AB进程对话
A进程先发送一句话给B进程,B进程接收后打印
B进程再回复一句话给A进程,A进程接收后打印
重复1.2步骤,当收到quit后,要结束AB进程
ubuntu@ubuntu:day8$ cat homework2.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<errno.h>
#include<fcntl.h>
int main(int argc,const char *argv[])
{
//创建两个管道文件
if(mkfifo("fifo1",0775) < 0)
{
if(17 != errno)
{
perror("mkfifo");
return -1;
}
}
if(mkfifo("fifo2",0775) < 0)
{
if(17 != errno)
{
perror("mkfifo");
return -1;
}
}
printf("allfifo create success \n");
char buf[128]="";
ssize_t res = 0;
//创建两个进程:
pid_t cpid = fork();
//父进程
if(cpid > 0)
{
int fd_w = open("fifo1",O_WRONLY);
if(fd_w < 0)
{
perror("open");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));
printf("请输入>>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
if(strcmp(buf,"quit"))
break;
if(write(fd_w,buf,sizeof(buf)) < 0)
{
perror("write");
return -1;
}
}
//kill(cpid,9);
close(fd_w);
}
//子进程
if(0 == cpid)
{
int fd_r = open("fifo2",O_RDONLY);
if(fd_r < 0)
{
perror("open");
return -1;
}
while(1)
{
bzero(buf,sizeof(buf));
res = read(fd_r,buf,sizeof(buf));
if(res < 0)
{
perror("open");
return -1;
}
else if(0 == res)
{
printf("对终端进程退出\n");
break;
}
else
{
printf("res = %ld buf = %s \n",res,buf);
}
}
close(fd_r);
}
else
{
perror("fork");
return -1;
}
return 0;
}
ubunt
捕获2 3 20号信号