#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <pthread.h>
#include <unistd.h>
pthread_t tid1,tid2;
void * read_thread(void *arg){
int fd = *(int *)arg;
char buf[1024] = {0};
int n;
while(1){
memset(buf,0,sizeof(buf));
n = read(fd,buf,sizeof(buf));
if(n == 0){
continue;
}
if(strncmp(buf,"quit",4)==0){
break;
}
write(STDOUT_FILENO,buf,sizeof(buf));
}
}
void * write_thread(void *arg){
int fd = *(int *)arg;
char buf[1024] = {0};
int n;
while(1){
memset(buf,0,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
n = write(fd,buf,sizeof(buf));
if(strncmp(buf,"quit",4) == 0){
pthread_cancel(tid1);//向讀線程發送終止信息
pthread_exit(NULL);
}
lseek(fd,-n,SEEK_END);
}
}
int main(int argc, const char *argv[])
{
int fd;
fd = open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd<0){
perror("Fail is open");
}
pthread_create(&tid2,NULL,write_thread,(void *)&fd);
pthread_create(&tid1,NULL,read_thread,(void *)&fd);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
void * child_thread(void *arg){
static int num=120;
char buf[1024];
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, const char *argv[])
{
pthread_t pid;
int *c=NULL;
pthread_create(&pid,NULL,child_thread,NULL);
pthread_join(pid,(void **)&c);
printf("%#x\n",*c);
return 0;
}