聊天交互:
用户1代码:
#include <myhead.h>
void signal_handler(int signo)
{
if(signo==SIGALRM)
{
printf("因长时间未应答,暂且挂起,但仍可接受信息\n");
alarm(8);//重启定时器
}
}
void *Chat(void *arg)
{
int fd;
if((fd=open("./myfifo1",O_WRONLY))==-1)
{
perror("open fifo1 error");
return -1;
}
while(1)
{
char buf[128];
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
write(fd,buf,strlen(buf));
if(strcmp(buf,"quit")==0)
{
break;
}
signal(SIGALRM,signal_handler);
}
close(fd);
}
int main(int argc, const char *argv[])
{
if(mkfifo("./myfifo1",0664)==-1)
{
perror("mkfifo1 error");
return -1;
}
int fd;
if((fd=open("./myfifo2",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
while(1)
{
//定义数据容器
char buf[128]="";
read(fd,buf,sizeof(buf));
if(strcmp(buf,"quit")==0)
{
printf("即将退出聊天室\n");
break;
}
signal(SIGALRM,signal_handler);
}
close(fd);
return 0;
}
用户二代码:
#include <myhead.h>
void signal_handler(int signo)
{
if(signo==SIGALRM)
{
printf("因长时间未应答,暂且挂起,但仍可接受信息\n");
alarm(8);//重启定时器
}
}
void *Chat(void *arg)
{
int fd;
if((fd=open("./myfifo2",O_WRONLY))==-1)
{
perror("open fifo1 error");
return NULL;
}
while(1)
{
char buf[128];
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
write(fd,buf,strlen(buf));
if(strcmp(buf,"quit")==0)
{
break;
}
signal(SIGALRM,signal_handler);
}
close(fd);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
if(mkfifo("./myfifo2",0664)==-1)
{
perror("mkfifo1 error");
return -1;
}
pthread_t tid2;
if(pthread_create(&tid2,NULL,Chat,NULL))
{
perror("create tid2 error");
return -1;
}
int fd;
if((fd=open("./myfifo1",O_RDONLY))==-1)
{
perror("open error");
return -1;
}
while(1)
{
//定义数据容器
char buf[128]="";
read(fd,buf,sizeof(buf));
if(strcmp(buf,"quit")==0)
{
printf("即将退出聊天室\n");
break;
}
signal(SIGALRM,signal_handler);
}
close(fd);
pthread_join(tid2,NULL);
return 0;
}