1.
1.1
#include "myhead.h"
void *task(void *arg){
int rfd=-1;//创建一个管道
if((rfd=open("./myfifo1",O_RDONLY))==-1){
perror("rfd open error");
}
char rbuf[128]="";
while(1){
bzero(rbuf,sizeof(rbuf));
read(rfd,rbuf,sizeof(rbuf));
printf("\n收到一条消息:%s\n",rbuf);
if(strcmp(rbuf,"quit")==0){
break;
}
}
close(rfd);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid=-1;//主线程
if(pthread_create(&tid,NULL,task,NULL)!=0){
printf("tid create error");
return -1;
}
int wfd=-1;
if((wfd=open("./myfifo",O_WRONLY))==-1){
perror("wfd open error");
return -1;
}
char wbuf[128]="";
while(1){
printf("请输入>>>");
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1]=0;
write(wfd,wbuf,sizeof(wbuf));
if(strcmp(wbuf,"quit")==0){
break;
}
}
close(wfd);
pthread_join(tid,NULL);
return 0;
}
#include "myhead.h"
void *task(void *arg){
int wfd=-1;
if((wfd=open("./myfifo1",O_WRONLY))==-1){
perror("wfd open error");
}
char wbuf[128]="";
while(1){
printf("请输入");
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1]=0;
write(wfd,wbuf,sizeof(wbuf));
if(strcmp(wbuf,"quit")==0){
break;
}
}
close(wfd);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t tid=-1;
if(pthread_create(&tid,NULL,task,NULL)!=0){
printf("tid create error\n");
return -1;
}
int rfd=-1;
if((rfd=open("./myfifo",O_RDONLY))==-1){
perror("rfd open error");
return -1;
}
char rbuf[128]="";
while(1){
bzero(rbuf,sizeof(rbuf));
read(rfd,rbuf,sizeof(rbuf));
printf("\n收到一条消息:%s\n",rbuf);
if(strcmp(rbuf,"quit")==0){
break;
}
}
close(rfd);
pthread_join(tid,NULL);
return 0;
}
2.使用无名管道完成父子进程间的通信
3使用标准IO完成两个文件的拷贝
4.使用文件IO实现两个文件的拷贝
5.使用多进程完成两个文件的拷贝
6.使用多线程完成两个文件的拷贝
7.将互斥锁的案例重新写一遍
8.将无名信号量实现生产者消费者程序重新实现一遍
9.将条件变量实现生产者消费者程序重新实现一遍