服務端負責讀取管道中資料並將其列印出來
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中設立了乙個專門的特殊檔案系統 管道檔案,它存在於檔案系統中,任何程序可以在任何時候通過有名管道的路徑和檔案...