1> 将互斥机制的代码实现重新敲一遍
2> 将无名信号量的代码实现重新敲一遍
3> 将条件变量的代码实现重新敲一遍
4> 将无名管道的代码实现重新敲一遍
5> 将有名管道的代码实现重新敲一遍
6> 使用有名管道完成两个进程的相互通信(提示:可以使用多进程或多线程完成)
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
//打开管道文件
int rfd = -1;
int wfd = -1;
if(pid>0)
{
//以只写读的形式打开文件
if((rfd = open("./myfifo1", O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
//定义容器
char rbuf[128] = "";
while(1)
{
//清空数组
bzero(rbuf, sizeof(rbuf));
//读取管道中的数据
read(rfd, rbuf, sizeof(rbuf));
//输出结果
printf("收到的数据为:%s\n", rbuf);
//判断结果
if(strcmp(rbuf,"quit") == 0)
{
break;
}
}
wait(NULL);
}
else if(pid==0)
{
if((wfd = open("./myfifo", O_WRONLY)) == -1)
{
perror("open error");
return -1;
}
char wbuf[128] = "";
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin);
wbuf[strlen(wbuf)-1] = 0;
//将数据写入管道
write(wfd, wbuf, strlen(wbuf));
//判断结果
if(strcmp(wbuf,"quit") == 0)
{
break;
}
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
//关闭文件
close(rfd);
return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
//打开管道文件
int rfd = -1;
int wfd = -1;
if(pid>0)
{
//以只写读的形式打开文件
if((rfd = open("./myfifo", O_RDONLY)) == -1)
{
perror("open error");
return -1;
}
//定义容器
char rbuf[128] = "";
while(1)
{
//清空数组
bzero(rbuf, sizeof(rbuf));
//读取管道中的数据
read(rfd, rbuf, sizeof(rbuf));
//输出结果
printf("收到的数据为:%s\n", rbuf);
//判断结果
if(strcmp(rbuf,"quit") == 0)
{
break;
}
}
wait(NULL);
}
else if(pid==0)
{
if((wfd = open("./myfifo1", O_WRONLY)) == -1)
{
perror("open error");
return -1;
}
char wbuf[128] = "";
while(1)
{
printf("请输入>>>");
fgets(wbuf, sizeof(wbuf), stdin);
wbuf[strlen(wbuf)-1] = 0;
//将数据写入管道
write(wfd, wbuf, strlen(wbuf));
//判断结果
if(strcmp(wbuf,"quit") == 0)
{
break;
}
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork error");
return -1;
}
//关闭文件
close(rfd);
return 0;
}