linux作業系統程式設計 fifo複雜C S模型

2021-06-08 14:06:18 字數 2068 閱讀 3700

程式要求:

程式如下:

1、server.c

#include #include #include #include #include #include #include #include typedef struct      //定義乙個資料結構用於fifo中資料傳送

package;

static void child_read(char * , int *);

static void father_write(int *);

int main(int argc, char *argv)

if (pipe(pipe_fd) < 0) //建立pipe用於子程序與父程序之間的通訊

if ((pid = fork()) < 0)

if (pid == 0)

child_read(argv[1], pipe_fd); //子程序讀取fifo中的資料

else

father_write(pipe_fd); //父程序寫入fifo資料

return 0;

}static void child_read(char *arg, int *pipe_fd)

open_flag = 1;}}

if (open_flag == 0)

}while (read(server_fifo, &recv_package, sizeof(recv_package)) > 0) //讀取fifo中的資料

return ;

}static void father_write(int *pipe_fd)

printf("server>");

fgets(buf, sizeof(buf), stdin);

buf[strlen(buf) - 1] = 0;

write(client_fifo, buf, strlen(buf) + 1); //往客戶專用fifo中寫入資料

}return ;

}

2、client.c

#include #include #include #include #include #include #include #include typedef struct

package;

static void child_read(void);

static void father_write(int , int );

int main(int argc, const char *argv)

if ((server_fifo = open(argv[1], o_rdwr)) < 0) //開啟眾所周知的fifo

if ((pid = fork()) < 0)

if (pid == 0)

child_read(); //子程序讀

else

father_write(server_fifo, pid); //父程序寫

return 0;

}static void child_read(void)

open_flag = 1;}}

if (open_flag == 0)

}while (read(client_fifo, buf, sizeof(buf)) > 0) //讀取客戶專用fifo中的資料

printf("recv: %s\n", buf);

return ;

}static void father_write(int server_fifo, int pid)

return ;

}

注:該程式還存在一定的問題等待改善,但是可以基本實現以上模型的功能

1、伺服器端在應對多客戶端情況下,存在一定的混亂問題

2、伺服器端收到客戶端請求後只能寫回答一次,要再次寫回答需要客戶端再次傳送請求,否則會出現錯誤!

Linux系統程式設計 管道和FIFO

ls wc l 為執行上述命令,shell建立了兩個程序來分別執行ls和wc。通過管道連線兩個程序。管道是單向的,允許資料從乙個程序流向另乙個程序。管道是乙個位元組流意味著在使用管道時不存在訊息或訊息邊界。從管道中讀取資料的程序可以讀取任意大小的資料塊,而不管寫入程序寫入管道的資料塊大小。通過管道的...

Linux系統程式設計 fifo命名管道

fifo也被稱為命名管道。未命名的管道只能在兩個相關的程序之間使用,而且這兩個程序還有乙個共同的建立了他們的祖先程序,但是fifo,不相關的程序也能交換資料。fifo是一種檔案型別,fifo的建立有兩種方式。1.直接用命令建立 mkfifo 2.利用函式建立 int mkfifo const cha...

Linux系統程式設計之FIFO通訊

fifo 有名管道 應用於非血緣關係程序間 不能反覆讀取 例如 04 fifo w.c include include include include include include int main 當前目錄有乙個myfifo檔案 開啟fifo檔案 printf begin write.n int...