在寫**之前,先介紹乙個函式作為**鋪墊:
read函式理解: ssize_t read(int fd, void *buf, size_t count);
fd:檔案描述符,用來指向要操作的檔案的檔案結構體;
buf:一塊記憶體空間;
count:希望讀取的位元組數.
具體實現**如下:
makefile:
.phony:all
all : r_file r_fifo
r_file : r_file.c
gcc - o $@ $ ^
r_fifo : r_fifo.c
gcc - o $@ $ ^
.phony:clean
clean :
rm - f r_file r_fifo
r_file.c : (讀取檔案file,寫入命名管道)
#include #include #include #include #include #include #include #define max 1024
int main()
//寫端
int outfd;
outfd=open("fifo",o_wronly);//把fifo以只寫方式開啟
if(outfd==-1)
char buf[max];
int s;
while (s = (read(infd, buf, max))>0)
//將檔案描述符infd中的位元組讀取到緩衝區buf
//read返回成功讀取到的位元組數
close(infd);//關閉讀端
close(outfd);//關閉寫端
return 0;
}
r_fifo.c : (讀取管道,寫入目標檔案file.txt)
#include #include #include #include #include #include #include #define max 1024
int main()
//讀端
int infd;
infd=open("fifo",o_rdonly);
if(infd==-1)
char buf[max];
int s;
//將從管道中讀取到的資料寫入檔案file.txt中
while ((s = read(infd, buf, max))>0)
//關閉讀寫端
close(infd);
close(outfd);
return 0;
}
程式執行結果:
首先執行r_file,將檔案file中的內容讀取到管道中,然後進行程序等待:
然後執行r_fifo,將管道中的資料寫入目標檔案file.txt中,從而實現檔案的拷貝:
mysql使用命名管道 命名管道
管道是用於相關過程之間的通訊。我們是否可以使用管道進行不相關的程序通訊,比方說,我們要從乙個終端執行客戶端程式,從另乙個終端執行伺服器程式?答案是否定的。那麼怎樣才能實現不相關的程序通訊,簡單的答案就是使用 命名管道。即使這適用於相關的程序,但是使用命名管道進行相關的程序通訊沒有任何意義。我們使用乙...
Linux 使用命名管道通訊例項
例1.用命名管道實現檔案拷貝 如圖 我用命名管道tp 實現了將檔案abc 中內容拷貝至abc.bak中,具體實現過程我在上篇部落格中詳細說明了,這裡我不贅述,只顯示 實現過程。上篇部落格 程序間通訊 管道詳解 完整 fifo1.c include include include include in...
命名管道的簡單使用
華清遠見嵌入式學院 講師。區別於無名管道,命名管道可以用於沒有親緣關係的程序之間進行通訊,且命名管道在一些特點上更類似於檔案,其具有檔名,檔案屬性及存放路徑等資訊,也就是說利用命名管道進行操作後,我們可以在相應的路徑下查詢到它,更方便程式設計的需要和操作,且命名管道嚴格地遵循先進先出原則。命名管道在...