資源簡介
兩個獨立的程序 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
- 上一篇:stm32_RSA.zip
- 下一篇:黑馬49期 品優購分布式電商項目全套視頻及源碼
評論
共有 條評論