Linux程序間通訊 命名管道fifo

2021-09-02 18:39:29 字數 1939 閱讀 5043

服務端負責讀取管道中資料並將其列印出來

fifo_pipe_server.c

#include #include #include #include #include #include #include #include #include #include #include #define buf_len pipe_buf

#define fifo_name "/var/tmp/fifo_test"

int sigint = 0;

void signal_acquire(int signo)

int main(int argc,char **argv)

struct sigaction action, old_action;

action.sa_handler = signal_acquire;

sigemptyset(&action.sa_mask);

action.sa_flags = 0;

sigaction(sigint, null, &old_action);

if (old_action.sa_handler != sig_ign)

if(access(fifo_name,f_ok) < 0)

} pipefd = open(fifo_name,o_wronly);

if(pipefd == -1 )

do perror("read stdin_fileno");

close(pipefd);

return -1;

} if(write(pipefd,buf,send_num)!=send_num)

if(strncmp(buf,"quit",4) == 0)

send_total +=send_num;

// printf("send_total is %d\n",send_total);

}while(!quit);

return 0;

}

客戶端負責從標準輸入獲得資料,通過fifo管道傳送給server端

fifo_pipe_client.c

#include #include #include #include #include #include #include #include #include #include #define buf_len pipe_buf

#define fifo_name "/var/tmp/fifo_test"

int main(int argc,char **argv)

} pipefd = open(fifo_name,o_rdonly);

if(pipefd == -1 )

do read_total +=read_num;

printf("pipe server read is %s\n",buf);

if(strncmp(buf,"quit",4) == 0)

}while(!quit);

return 0;

}

編譯的makefile檔案

all:clean fifo_pipe_server fifo_pipe_client

fifo_pipe_server:fifo_pipe_server.c

$(cc) -o fifo_pipe_server fifo_pipe_server.c

fifo_pipe_client:fifo_pipe_client.c

$(cc) -o fifo_pipe_client fifo_pipe_client.c

clean:

rm -f fifo_pipe_server fifo_pipe_client

在linux中執行:

./fifo_pipe_server &

./fifo_pipe_client

Linux程序間通訊 命名管道

ipc 命名管道 一 原理 管道的乙個不足之處是沒有名字,因此,只能用於具有親緣關係的程序間通訊,在命名管道 named pip 或fifo 提出後,該限制得到了克服。fifo 不同於管道之處 在於它提供乙個路徑名與之關聯,以fifo的檔案形式儲存於檔案系統中 命名管道是乙個裝置檔案,因此,即使程序...

linux程序間通訊(命名管道)

在處理程序間通訊的問題時,匿名管道只能在有親緣關係的程序中進行通訊。如何做到在任意兩個程序之間通訊,這就要用到命名管道。命名管道也被稱為fifo檔案,它是一種特殊型別的檔案,在檔案系統中以檔案的形式存在,它的行為和匿名管道類似。可以使用mkfifo函式來建立乙個命名管道。int mkfifo con...

linux程序間通訊 命名管道

命名管道也被稱為fifo檔案,它是一種特殊型別的檔案,它在檔案系統中以檔名的形式存在,但是它的行為卻和之前所講的沒有名字的管道 匿名管道 類似。有名管道是有名有形的,為了使用這種管道linux中設立了乙個專門的特殊檔案系統 管道檔案,它存在於檔案系統中,任何程序可以在任何時候通過有名管道的路徑和檔案...