1.要求实现AB进程对话
A进程先发送一句话给B进程,B进程接收后打印
B进程再回复一句话给A进程,A进程接收后打印
重复1.2步骤,当收到quit后,要结束AB进程
提示:两根管道
文件1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <unistd.h>
void* receive(void* arg)
{
umask(0);
if(mkfifo("./myfifo2",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return NULL;
}
}
printf("fifo2 create sucess\n");
int fd=open("./myfifo2",O_RDONLY);
if(fd<0)
{
perror("open");
return NULL;
}
printf("open fifo2 sucess fd=%d\n",fd);
char buf[128]="";
ssize_t res=0;
while(1)
{
res=read(fd,buf,sizeof(buf));
if(res<0)
{
perror("read");
return NULL;
}
else if(0==res)
{
printf("写端退出\n");
break;
}
printf("收到信息: res=%ld buf=%s\n发送信息请输入>>>\n",res,buf);
if(strcasecmp(buf,"quit")==0)
break;
}
close(fd);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{ pthread_t tid;
if(pthread_create(&tid,NULL,receive,NULL)<0)
{
return -1;
}
umask(0);
if(mkfifo("./myfifo1",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
printf("fifo create sucess\n");
int fd=open("./myfifo1",O_WRONLY);
if(fd<0)
{
perror("open");
return -1;
}
printf("open fifo1 sucess fd=%d\n",fd);
char buf[128]="";
while(1)
{
printf("请输入>>>\n");
fgets(buf, sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(write(fd,buf,sizeof(buf))<0)
{
perror("write");
return -1;
}
if(strcasecmp(buf,"quit") == 0) //忽略大小写的比较
break;
printf("写入成功\n");
}
close(fd);
return 0;
}
文件2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
void* sent(void* arg)
{
umask(0);
if(mkfifo("./myfifo2",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return NULL;
}
}
printf("fifo2 create sucess\n");
int fd=open("./myfifo2",O_WRONLY);
if(fd<0)
{
perror("open");
return NULL;
}
printf("open fifo2 sucess fd=%d\n",fd);
char buf[128]="";
while(1)
{
printf("请输入>>>\n");
fgets(buf, sizeof(buf),stdin);
buf[strlen(buf)-1]=0;
if(write(fd,buf,sizeof(buf))<0)
{
perror("write");
return NULL;
}
if(strcasecmp(buf,"quit") == 0) //忽略大小写的比较
break;
printf("写入成功\n");
}
close(fd);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid;
if(pthread_create(&tid,NULL,sent,NULL)<0)
{
return -1;
}
sleep(1);
umask(0);
if(mkfifo("./myfifo1",0777)<0)
{
if(errno!=17)
{
perror("mkfifo");
return -1;
}
}
printf("fifo create sucess\n");
int fd=open("./myfifo1",O_RDONLY);
if(fd<0)
{
perror("open");
return -1;
}
printf("open fifo1 sucess fd=%d\n",fd);
char buf[128]="";
ssize_t res=0;
while(1)
{
res=read(fd,buf,sizeof(buf));
if(res<0)
{
perror("read");
return -1;
}
else if(0==res)
{
printf("写端退出\n");
break;
}
printf("收到信息:res=%ld buf=%s\n发送信息请输入>>>\n",res,buf);
if(strcasecmp(buf,"quit")==0)
break;
}
close(fd);
return 0;
}
2. 捕获2 3 20号信号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
void handler1(int sig)
{
printf("触发sig=%d信号\n",sig);
}
void handler2(int sig)
{
printf("触发sig=%d信号\n",sig);
}
void handler3(int sig)
{
printf("触发sig=%d信号\n",sig);
}
typedef void (*sighandler_t)(int);
int main(int argc, const char *argv[])
{
sighandler_t a=signal(2,handler1);
if(a==SIG_ERR)
{
perror("signal");
return -1;
}
sighandler_t b=signal(3,handler2);
if(b==SIG_ERR)
{
perror("signal");
return -1;
}
sighandler_t c=signal(20,handler3);
if(c==SIG_ERR)
{
perror("signal");
return -1;
}
while(1)
{
printf("signal.....\n");
sleep(1);
}
return 0;
}