91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .zip
    金幣: 2
    下載: 1 次
    發布日期: 2022-10-06
  • 語言: 其他
  • 標簽: 匿名管道??FIFO??

資源簡介

兩個獨立的程序 master 和 client,要求這兩個程序完成以下功能: (1) master 和 client 分別創建一個子進程; (2) client 完成創建子進程后,其子進程等待用戶從鍵盤輸入一串字符串,并將字符串通 過 clinet 發送到 master; (3) master 完成創建子進程后,等待接收 client 發送的字符串,接收完成后,將接收的 字符串發送給其子進程,子進程接收字符串后,打印出接受到的字符串內容,同時通過 master 向 client 發送接收成功響應; (4) client 發送字符串后,等待 master 響應,并打印通知用戶通信成功; (5) 設定一個終止條件,當終止條件被觸發時,將兩個程序退出。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include?

#define?READ?0
#define?WRITE?1
#define?FIFO1?“/root/Desktop/FIFO1“?/*有名管道的名字*/
#define?FIFO2?“/root/Desktop/FIFO2“
#define?LENGTH?50?/*字符數組的長度*/

int?main()
{
pid_t?pid;
int?retfd1fd2;?/*ret用來接收mkfifo返回的值,fd用來存放打開有名管道的文件描述符*/
char?buf[LENGTH];
int?filedis[2];
pipe(filedis);

if(access(FIFO1F_OK))//判斷是否已經創建了有名管道,如果已經創建,則返回0否則返回非0的數??????????????????????
????{
????????ret?=?mkfifo(FIFO10777);?/*創建有名管道成功返回0失敗返回-1*/
????????if(ret?==?-1)?/*創建有名管道失敗*/
????????{
????????????printf(“error?mkfifo“);
????????????exit(1);
????????}
????}
????if(access(FIFO2F_OK))//判斷是否已經創建了有名管道,如果已經創建,則返回0否則返回非0的數??????????????????????
????{
????????ret?=?mkfifo(FIFO20777);?/*創建有名管道成功返回0失敗返回-1*/
????????if(ret?==?-1)?/*創建有名管道失敗*/
????????{
????????????printf(“error?mkfifo“);
????????????exit(1);
????????}
????}

if((pid=fork())==?-1) //創建無名管道失敗
{
printf(“error?fork“);
return?0;
}

if(pid==0) //child
{
fgets(bufLENGTHstdin); //等待用戶輸入字符串
close(filedis[READ]);
//printf(“test1:%s\n“buf);
write(filedis[WRITE]bufstrlen(buf)); //發送給父進程
}
else //parent
{
close(filedis[WRITE]);
int?len=0;
while(1) //等待接收子進程發來的數據
{
len=read(filedis[READ]bufsizeof(buf));
if(len>0)?break;
}
//printf(“test2:%s\n“buf);

fd1?=?open(FIFO1O_WRONLY);?//寫方式打開有名管道,不能同時以讀寫權限打開成功返回文件描述符,失敗返回-1
if(fd1??==?-1)?/*打開失敗*/
{
printf(“error:?open?fifo“);
exit(1);
}
write(fd1bufstrlen(buf)); //將數據通過有名管道發送到maseter
close(fd1);

fd2?=?open(FIFO2O_RDONLY);
memset(buf‘\0‘sizeof(buf)); //清空buf
len=0;
while(1)
{
len=read(fd2buf2);
if(len>0&&buf[0]==‘O‘&&buf[1]==‘K‘)?
{
printf(“%s“buf);
printf(“communication?success!\nthis?is?client‘s?parentid:%d\n“getpid());
break;
}
}
/* memset(buf‘\0‘sizeof(buf)); //清空buf?等待接收結束命令
len=0;
while(1)
{
len=read(fd2buf1);
if(len>0&&buf[0]==‘q‘)?
{
close(fd2);
break;
}
}*/
printf(“end\n“);?
}
return?0;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2367??2019-01-07?18:42??master.c
?????文件????????2595??2019-01-07?18:39??client.c

評論

共有 條評論