#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
#include<pthread.h>
pthread_t tid1;
pthread_t tid2;
void *read_thread(void *arg)
{
char buf[1024]={0};
int n=0;
int fd=*(int *)arg;
while(1)
{
memset(buf,0,sizeof(buf));
n=read(fd,buf,sizeof(buf));
if(n==0)
{
continue;
}
printf("%s\n",buf);
}
}
void *write_thread(void *arg)
{
int fd=*(int *)arg;
char buf[1024]={0};
int n=0;
while(1){
memset(buf,0,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
n= write(fd,buf,sizeof(buf));
if(n==0)
{
continue;
}
lseek(fd,-n,SEEK_CUR);
if(!strncmp(buf,"quit",4))
{
pthread_cancel(tid1);//取消tid线程的执行
pthread_exit(NULL);
}
}
}
int main(int argc, const char *argv[])
{
int ret;
int fd=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd<0)
{
perror("fail");
return -1;
}
ret=pthread_create(&tid1,NULL,read_thread,(void *)&fd);
if(ret!=0)
{
errno=ret;
perror("fail");
return -1;
}
ret=pthread_create(&tid2,NULL,write_thread,(void *)&fd);
pthread_join(tid1,NULL);//阻塞函数等待子线程退出后 回收
pthread_join(tid2,NULL);//阻塞函数等待父线程退出后 回收
return 0;
}