Linux 使用命名管道實現簡單的檔案拷貝

2021-09-08 07:28:58 字數 1655 閱讀 4752

在寫**之前,先介紹乙個函式作為**鋪墊:

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...

命名管道的簡單使用

華清遠見嵌入式學院 講師。區別於無名管道,命名管道可以用於沒有親緣關係的程序之間進行通訊,且命名管道在一些特點上更類似於檔案,其具有檔名,檔案屬性及存放路徑等資訊,也就是說利用命名管道進行操作後,我們可以在相應的路徑下查詢到它,更方便程式設計的需要和操作,且命名管道嚴格地遵循先進先出原則。命名管道在...