第一题
A进程代码
#include
int main(int argc, char const *argv[])
{
//创建第一个管道
if(mkfifo("./fifo_1",0664)<0){
if(errno!=17){
perror("mkfifo");
return -1;
}
}
//创建第二个管道
if(mkfifo("./fifo_2",0664)<0){
if(errno!=17){
perror("mkfifo");
return -1;
}
}
//打开
char buf[128]="";
while(1){
//打开第一个管道(读)
int fp1=open("./fifo_1",O_RDONLY);
if(fp1<0){
perror("open");
return -1;
}
bzero(buf,sizeof(buf));
off_t res=read(fp1,buf,sizeof(buf));
printf("读取数据为>>>>%s\n",buf);
if(0==res){
puts("数据读取完成");
break;
}
//关闭第一个管道
close(fp1);
//打开第二个管道(写)
int fp2=open("./fifo_2",O_WRONLY);
if(fp2<0){
perror("open");
return -1;
}
bzero(buf,sizeof(buf));
printf("输入数据为>>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"quit")==0){
puts("退出输入");
break;
}
write(fp2,buf,sizeof(buf));
puts("发送成功");
//关闭第二个管道
close(fp2);
}
return 0;
}
B进程代码
#include
int main(int argc, char const *argv[])
{
//创建第一个管道
if(mkfifo("./fifo_1",0664)<0){
if(errno!=17){
perror("mkfifo");
return -1;
}
}
//创建第二个管道
if(mkfifo("./fifo_2",0664)<0){
if(errno!=17){
perror("mkfifo");
return -1;
}
}
//打开
char buf[128]="";
while(1){
//打开第一个管道(写)
int fp1=open("./fifo_1",O_WRONLY);
if(fp1<0){
perror("open");
return -1;
}
bzero(buf,sizeof(buf));
printf("输入数据为>>>");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"quit")==0){
puts("退出输入");
break;
}
write(fp1,buf,sizeof(buf));
puts("发送成功");
//关闭第一个管道
close(fp1);
//打开第二个管道(读)
int fp2=open("./fifo_2",O_RDONLY);
if(fp2<0){
perror("open");
return -1;
}
bzero(buf,sizeof(buf));
off_t res=read(fp2,buf,sizeof(buf));
printf("读取数据为>>>>%s\n",buf);
if(0==res){
puts("数据读取完成");
break;
}
//关闭第二个管道
close(fp2);
}
return 0;
}
现象
思考题
A代码
#include
pthread_t tidA;
pthread_t tidB;
void* funcA(void* arg);
void* funcB(void* arg);
int main(int argc, char const *argv[])
{
if(pthread_create(&tidA,NULL,funcA,NULL)!=0){
printf("__%d__\n",__LINE__);
return -1;
}
if(pthread_create(&tidB,NULL,funcB,NULL)!=0){
printf("__%d__\n",__LINE__);
return -1;
}
while(1)
sleep(1);
return 0;
}
void* funcA(void* arg)
{
char buf[128]="";
while(1){
if(mkfifo("./fifo_1",0664)<0){
if(errno!=17){
perror("mkfifo");
return NULL;
}
}
int fp1=open("./fifo_1",O_RDONLY);
if(fp1<0){
perror("open");
return NULL;
}
bzero(buf,sizeof(buf));
off_t res=read(fp1,buf,sizeof(buf));
printf("读取数据为>>>>%s\n",buf);
if(0==res){
puts("数据读取完成");
break;
}
close(fp1);
}
}
void* funcB(void* arg)
{
char buf[128]="";
while(1){
if(mkfifo("./fifo_2",0664)<0){
if(errno!=17){
perror("mkfifo");
return NULL;
}
}
int fp2=open("./fifo_2",O_WRONLY);
if(fp2<0){
perror("open");
return NULL;
}
bzero(buf,sizeof(buf));
printf("输入数据为>>>\n");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"quit")==0){
puts("退出输入");
break;
}
write(fp2,buf,sizeof(buf));
puts("发送成功");
close(fp2);
}
}
B代码
#include
pthread_t tidA;
pthread_t tidB;
void* funcA(void* arg);
void* funcB(void* arg);
int main(int argc, char const *argv[])
{
if(pthread_create(&tidA,NULL,funcA,NULL)!=0){
printf("__%d__\n",__LINE__);
return -1;
}
if(pthread_create(&tidB,NULL,funcB,NULL)!=0){
printf("__%d__\n",__LINE__);
return -1;
}
while(1)
sleep(1);
return 0;
}
void* funcA(void* arg)
{
char buf[128]="";
while(1){
if(mkfifo("./fifo_2",0664)<0){
if(errno!=17){
perror("mkfifo");
return NULL;
}
}
int fp1=open("./fifo_2",O_RDONLY);
if(fp1<0){
perror("open");
return NULL;
}
bzero(buf,sizeof(buf));
off_t res=read(fp1,buf,sizeof(buf));
printf("读取数据为>>>>%s\n",buf);
if(0==res){
puts("数据读取完成");
break;
}
close(fp1);
}
}
void* funcB(void* arg)
{
char buf[128]="";
while(1){
if(mkfifo("./fifo_1",0664)<0){
if(errno!=17){
perror("mkfifo");
return NULL;
}
}
int fp2=open("./fifo_1",O_WRONLY);
if(fp2<0){
perror("open");
return NULL;
}
bzero(buf,sizeof(buf));
printf("输入数据为>>>\n");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"quit")==0){
puts("退出输入");
break;
}
write(fp2,buf,sizeof(buf));
puts("发送成功");
close(fp2);
}
}
现象