一、命名管道通訊
管道通訊分為:無名管道和有名管道
無名管道是用於父子孫程序,之間有血緣關係
有名管道:用於任意兩個程序
無名管道:
1、建立:int pipe(int filedis[2]); 它會建立兩個檔案描述符 filedis[0] 用於讀管道
filedis[1] 用於寫管道
(通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道。必須在系統呼叫fork()前呼叫pipe(),否則子程序將不會繼承檔案描述符)
2、關閉:close(filedis[0]),close(filedis[1])
//利用無名管道進行程序間通訊,父程序write,子程序read
//所需要用到的函式pipe,fork,write,read,memset,strcmp
#include #include #include #include #include void write(int fd)
; memset(buf,0,sizeof(buf));
printf("please input what you would write:\n");
fgets(buf,sizeof(buf),stdin);
int ret = write(fd,buf,sizeof(buf));
if(-1 == ret)
}void read(int fd)
; memset(buf,0,sizeof(buf));
int ret = read(fd,buf,sizeof(buf));
if(-1 == ret)
printf("read from pipe:%s\n",buf);
}int main()
; pid_t pid;
ret = pipe(fd);//建立乙個無名管道
if(-1 == ret)
pid = fork();
if(-1 == pid)
else if(0 == pid)//子程序,read
else//父程序,write
return 0;
}
二、命名管道
fifo_read.c
//應用有名管道進行不同程序之間的通訊,其實是在磁碟上開啟乙個tmp檔案進行讀寫
//所要應用到的函式:mkfifo,open,read,close,unlink,strcmp
#include #include #include #include #include #include #include int main()
while(1)
printf("read from 1.tmp :%s\n",buf);
if(!strcmp(buf,"bye\n"))
memset(buf,0,sizeof(buf));
} close(fd);
unlink("1.tmp");
return 0;
}
fifo_write.c
//有名管道寫程序
//open,write,strcmp,close
#include #include #include #include #include #include #include int main()
; fd = open("1.tmp",o_wronly);
if(-1 == fd)
while(1)
if(!strcmp(buf,"bye\n"))
memset(buf,0,sizeof(buf));
}close(fd);
return 0;
}
linux程序間通訊之管道
下面幾節,將分別溫習下linux程序進通訊的幾種機制1 管道 管道是比較古老的程序間的通訊方式。主要有有名管道和無名管道兩種。2 無名管道 它的特點就是 1 只能使用在具有親緣關係的程序之間的通訊 父子程序或者兄弟程序之間 因為只有具有親緣關係的程序才能繼承其建立的檔案描述符。2 是乙個半雙工的通訊...
Linux程序間通訊之管道
管道,你可以把它想成一根資料線,連線了兩個程序,使他們可以互相通訊。更嚴謹來說,它是乙個檔案或者一塊共享區,乙個程序往裡面寫資料,另乙個程序從裡面拿資料,以此種方式完成程序間通訊。管道是unix系統ipc最古老的形式,所有的unix系統都提供此種通訊機制 unix系統ipc是各種程序通訊方式的統稱 ...
Linux 程序間通訊之管道
這裡說的管道是指匿名管道 無名管道 是 unix 系統ipc最古老的形式。其本質是乙個偽檔案 實為核心緩衝區 它是半雙工的 即資料只能在乙個方向上流動 具有固定的讀端和寫端。它只能用於具有親緣關係的程序之間的通訊 也是父子程序或者兄弟程序之間 它可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的...