#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>
#include<errno.h>
#include<stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
void *pthread_RWONLY(void*arg)
{
static int num = 120;
char buf[1024]={0};
while (1)
{
memset(buf,0,sizeof(buf));
read(STDIN_FILENO,buf,sizeof(buf));
if(!(strncmp(buf,"quit",4))){
pthread_exit(&num);
}
write(STDOUT_FILENO,buf,sizeof(buf));
}
}
int main(int argc, char const *argv[])
{
pthread_t tid;
int ret;
int *retval = NULL;
ret = pthread_create(&tid,NULL,pthread_RWONLY,NULL);
if(ret != 0){
errno = ret;
perror("Fail to create");
return -1;
}
pthread_join(tid,(void**)&retval);
printf("%#x\n",*retval);
return 0;
}
#include<pthread.h>
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<unistd.h>
pthread_t tid1;
pthread_t tid2;
void *thread_write(void*arg)
{
int fd =*(int *)arg;
int n;
char buf[1024]={0};
while (1)
{
memset(buf,0,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
if((strncmp(buf,"quit",4)) == 0){
pthread_cancel(tid2);
pthread_exit(NULL);
}
n=write(fd,buf,strlen(buf));
lseek(fd,-n,SEEK_CUR);
}
}
void *thread_read(void*arg)
{
int fd =*(int *)arg;
char buf[1024] ={0};
while (1)
{
sleep(1);
memset(buf,0,sizeof(buf));
if((read(fd,buf,sizeof(buf))) ==0){
continue;
}
printf("%s",buf);
}
}
int main(int argc, char const *argv[])
{
int fd;
int ret1,ret2;
if((fd = open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666))== -1){
perror("Fail to open");
return -1;
}
if((ret1 = pthread_create(&tid1,NULL,thread_write,(void *)&fd)) !=0){
errno = ret1;
perror("Fail to pthread_create");
return -1;
}
if((ret2 = pthread_create(&tid2,NULL,thread_read,(void *)&fd)) !=0){
errno = ret2;
perror("Fail to pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}