1.管道的創建
#include<unistd.h>
int pipe(int fd[2]);
2.管道的讀寫規則
管道兩端可分別用描述字fd[0]以及fd[1]來描述,fd[0]描述的是隻讀管道,稱爲管道讀端。fd[1]描述的是隻寫管道,稱爲管道寫端。
3.程序演示
#include
#include
#include
#include
#include
/*
* 功能:通過無名管道實現文件拷貝
*argv[0]爲源文件路徑名,argv[1]爲目標路徑名
*/
#define SIZE 1024 //定義緩衝區大小
//錯誤處理函數
void err_exit(char* msg)
{
printf("%s\n",msg);
exit(EXIT_FAILURE);
}
int main(int argc,char* argv[])
{
if(argc != 3)
err_exit("參數不正確");
int fd[2];//定義管道描述符
if(pipe(fd) == -1)
{
perror("pipe()");
err_exit("分配管道出錯!");
}
char buf[SIZE];//緩衝區
ssize_t n;
if(fork() == 0)
{
close(fd[0]);//在子進程中關閉讀端
int fdr = open(argv[1],O_RDONLY);
while((n = read(fdr,buf,SIZE)) >0)
{
write(fd[1],buf,n);
}
close(fd[1]);
close(fdr);
exit(EXIT_SUCCESS);
}
close(fd[1]);//在父進程中關閉寫端
int fdw = open(argv[2],O_CREAT | O_WRONLY,0666);
while((n = read(fd[0],buf,SIZE)) >0)
{
write(fdw,buf,n);
}
close(fd[0]);
close(fdw);
return 0;
}