有名管道 信号 聊天

ls.c

```c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>

int fd;
pid_t yy_pid;
pid_t ls_pid;

void readMsg(int sig)
{
char buf[50]={0};
read(fd,buf,sizeof(buf));
printf("杨洋:%s\n",buf);
}
void xx(int sig)
{
kill(yy_pid,SIGINT);
kill(ls_pid,SIGINT);
exit(1);
}
int main(int argc,char *argv[])
{
if(argc!=2){
printf("usage: %s <Fname>\n",argv[0]);
exit(-1);
}
//创建管道文件(某一个名字的管道文件只运行创建一次)
if(access(argv[1],F_OK)){ //判断文件是否存在
if(mkfifo(argv[1],0666)){
perror("mkfifo error");
exit(-1);
}
}
//往管道文件中写数据
fd = open(argv[1],O_RDWR);
if(fd<0){
perror("open error");
exit(-1);
}
ls_pid = getpid();
read(fd,&yy_pid,sizeof(yy_pid));
kill(yy_pid,0);
write(fd,&ls_pid,sizeof(ls_pid));
printf("yy_pid:%d ls_pid:%d\n",yy_pid,ls_pid);
signal(12, readMsg);
signal(SIGINT,xx);
char buf[50];
while(1)
{
bzero(buf,sizeof(buf));
scanf("%s",buf);
write(fd,buf,strlen(buf));
kill(yy_pid,10);
}
}
```
yy.c

```c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>

int fd;
pid_t yy_pid;
pid_t ls_pid;

void readMsg(int sig)
{
char buf[50]={0};
read(fd,buf,sizeof(buf));
printf("赵露思:%s\n",buf);
}
void xx(int sig)
{
kill(ls_pid,SIGINT);
kill(yy_pid,SIGINT);
exit(1);
}
int main(int argc ,char *argv[])
{
if(argc!=2){
printf("usage: %s <Fname>\n",argv[0]);
exit(-1);
}
//创建管道文件(某一个名字的管道文件只运行创建一次)
if(access(argv[1],F_OK)){ //判断文件是否存在
if(mkfifo(argv[1],0666)){
perror("mkfifo error");
exit(-1);
}
}
//往管道文件中写数据
fd = open(argv[1],O_RDWR);
if(fd<0){
perror("open error");
exit(-1);
}
yy_pid = getpid();
write(fd,&yy_pid,sizeof(yy_pid));
pause();
//sleep(2);
read(fd,&ls_pid,sizeof(ls_pid));
printf("yy_pid:%d ls_pid:%d\n",yy_pid,ls_pid);
signal(10, readMsg);
signal(SIGINT,xx);
char buf[50];
while(1)
{
bzero(buf,sizeof(buf));
scanf("%s",buf);
write(fd,buf,strlen(buf));
kill(ls_pid,12);
}
}
```
执行 gcc ls.c -o ls
./ls TT
后执行 gcc yy.c -o yy
./yy TT
两个终端 一个终端执行一个

posted @ 2022-05-14 15:46  孤走  阅读(10)  评论(0编辑  收藏  举报