一、作业:
代码:
create.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
//创建一个有名管道文件
if(mkfifo("./linux",0664)==-1)
{
perror("mkfifo linux error");
return -1;
}
getchar();
system("rm linux");
return 0;
}
write.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
//以写的形式打开linux文件
int wfd = open("./linux",O_WRONLY);
if(wfd==-1)
{
perror("open error");
return -1;
}
//准备一个字符串用于写入数据
char sbuf[128] = "";
while(1)
{
printf("请输入>>>");
fgets(sbuf,sizeof(sbuf),stdin);//从终端获取字符串
sbuf[strlen(sbuf)-1] = 0;
//将数据通过写端写入管道
write(wfd,sbuf,strlen(sbuf));
//判读终端获取的数据
if(strcmp(sbuf,"quit")==0)
{
break;
}
}
//关闭文件
close(wfd);
return 0;
}
reciv.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
//以只读的形式打开linux文件
int rfd = open("./linux",O_RDONLY);
if(rfd==-1)
{
perror("open error");
return -1;
}
//打开存储文件
int fd = -1;
if(fd =open("./cunchu.txt",O_WRONLY|O_CREAT|O_TRUNC,-664)==-1)
{
perror("open cunchu error");
return -1;
}
//定义一个字符串准备接受消息
char rbuf[128] = "";
while(1)
{
bzero(rbuf,sizeof(rbuf));
//从管道读取数据
read(rfd,rbuf,sizeof(rbuf));
if(strcmp(rbuf,"quit")==0)
{
break;
}
//输出数据
int src = sizeof(rbuf);
if(src != 0)
{
int a = write(fd,rbuf,sizeof(rbuf));
printf("%d\n",a);
}
printf("存储完成\n");
printf("收到来信:%s\n",rbuf);
}
//关闭文件
close(rfd);
close(fd);
}
运行结果:
代码:
create.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
//创建一个有名管道文件
if(mkfifo("./linux2",0664)==-1)
{
perror("mkfifo linux2 error");
return -1;
}
getchar();
system("rm linux2");
return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{
//创建一个有名管道文件
if(mkfifo("./linux1",0664)==-1)
{
perror("mkfifo linux1 error");
return -1;
}
getchar();
system("rm linux1");
return 0;
}
recv.c
#include<myhead.h>
void *task1(void *arg)
{
//以读的形式打开管道文件
int rfd = open("./linux1",O_RDONLY);
if(rfd == -1)
{
perror("open error");
}
printf("管道文件已打开");
char rbuf[128] = "";
while(1)
{
bzero(rbuf,sizeof(rbuf));
read(rfd,rbuf,sizeof(rbuf));
if(strcmp(rbuf,"quit")==0)
{
break;
}
printf("接收端收到的消息为:%s\n",rbuf);
}
close(rfd);
}
void *task2(void *arg)
{
//以写的形式打开管道文件
int wfd = open("./linux2",O_WRONLY);
if(wfd == -1)
{
perror("open error");
}
printf("管道文件已打开");
//发送数据
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;
}
}
close(wfd);
}
int main(int argc, const char *argv[])
{
//定义两个存储线程号
pthread_t tid1=-1;
pthread_t tid2=-1;
//创建两个分支线程
if(pthread_create(&tid1,NULL,task1,NULL)!=0)
{
printf("pthread_create error\n");
return -1;
}
if(pthread_create(&tid2,NULL,task2,NULL)!=0)
{
printf("pthread_create task2 error\n");
return -1;
}
//回收线程资源
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
send.c
#include<myhead.h>
void *task1(void *arg)
{
//以读的形式打开管道文件
int rfd = open("./linux2",O_RDONLY);
if(rfd == -1)
{
perror("open error");
}
printf("管道文件已打开");
char rbuf[128] = "";
while(1)
{
bzero(rbuf,sizeof(rbuf));
read(rfd,rbuf,sizeof(rbuf));
if(strcmp(rbuf,"quit")==0)
{
break;
}
printf("接收端收到的消息为:%s\n",rbuf);
}
close(rfd);
}
void *task2(void *arg)
{
//以写的形式打开管道文件
int wfd = open("./linux1",O_WRONLY);
if(wfd == -1)
{
perror("open error");
}
printf("管道文件已打开");
//发送数据
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;
}
}
close(wfd);
}
int main(int argc, const char *argv[])
{
//定义两个存储线程号
pthread_t tid1=-1;
pthread_t tid2=-1;
//创建两个分支线程
if(pthread_create(&tid1,NULL,task1,NULL)!=0)
{
printf("pthread_create error\n");
return -1;
}
if(pthread_create(&tid2,NULL,task2,NULL)!=0)
{
printf("pthread_create task2 error\n");
return -1;
}
//回收线程资源
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}