兩個有名管道實現qq通訊
1.先建立兩個有名管道:
/*
============================================================================
Name : qqConnext.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
int main(int argc,char **argv)
{
if(mkfifo("rdfifo",0666)<0)
{
perror("create pipe wrong!");
exit(1);
}
if(mkfifo("wrfifo",0666)<0)
{
perror("create pipe wrong!");
exit(1);
}
return EXIT_SUCCESS;
}
2.client端:一共兩個程式,一個用來讀,一個用來寫
#include <stdio.h>
#include <stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
#include<unistd.h>
int main()
{
pid_t pid;
int rfd,wfd;
char buf[1024];
int len;
umask(0);
while((rfd=open("wrfifo",O_RDONLY))==-1);
wfd=open("rdfifo",O_RDWR);
if(wfd==-1)
{
perror("client write wrong");
}
pid=fork();
if(pid==0)
{
while(1)
{
printf("client:");
fgets(buf,1024,stdin);
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"quit")==0)
{
close(rfd);
unlink("rdfifo");
exit(0);
}
write(wfd,buf,strlen(buf));
}
}
else
{
while(1)
{
len=read(rfd,buf,1024);
if(len==-1)
{
perror("client read wrong");
}
else
{
buf[len]='\0';
printf("server:%s\n",buf);
}
}
}
exit(0);
}
3.server端:
#include <stdio.h>
#include <stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<string.h>
#include<unistd.h>
int main(int argc,char **argv)
{
pid_t pid;
int wfd,rfd;
char buf[1024];
int len;
wfd=open("wrfifo",O_RDWR);
umask(0);
if(wfd==-1)
{
perror("open pipe wrfifo wrong!");
exit(1);
}
while((rfd=open("rdfifo",O_RDONLY))==-1)
{
}
pid=fork();
if(pid==0)
{
while(1)
{
len=read(rfd,buf,1024);
if(len==-1)
{
perror("server write wrong");
exit(1);
}
else
{
buf[len]='\0';
printf("Client:%s\n",buf);
}
}
}
else if(pid>0)
{
while(1)
{
printf("server:");
fgets(buf,1024,stdin);//從標準輸入獲取
buf[strlen(buf)-1]='\0';
if(strcmp(buf,"q")==0)
{
close(wfd);
unlink("wrfifo");
exit(0);
}
write(wfd,buf,strlen(buf));
}
}
exit(0);
}
相關文章
- 有名管道的實現
- Linux程式間通訊②:有名管道FIFOLinux
- 匿名管道通訊實現
- 3|程式間通訊--有名管道學習筆記筆記
- 無名管道和有名管道的概念與實現
- 兩個視窗如何實現通訊
- Delphi 簡單命名管道在兩個程式間通訊
- Linux系統程式設計(11)——程式間通訊之有名管道Linux程式設計
- 利用windows api實現程式通訊(命名管道)WindowsAPI
- 有名管道程式碼
- Java的通過管道來實現執行緒通訊Java執行緒
- 在如何實現兩個JBoss之間的訊息通訊?
- 實現兩個視窗通訊方法之postMessage
- 實現類似QQ的即時通訊程式(十一)
- 在同一個Activity下實現兩個Fragment之間的通訊Fragment
- Java中利用管道實現執行緒間的通訊(轉)Java執行緒
- 管道流間的通訊
- 程式間通訊(一)管道
- 程序間通訊(1)-管道
- MQ實現兩個應用系統之間的通訊-----實際操作(二)MQ
- 兩個Arduino 與兩個MCP2515 CAN模組通訊實現(用到ec11編碼器)UI
- Linux系統程式設計—有名管道Linux程式設計
- 程式間通訊——POSIX 有名訊號量與無名訊號量
- Linux 的程式間通訊:管道Linux
- 併發技術3:管道通訊
- linux 程式間通訊之管道Linux
- 系統程式設計——管道通訊程式設計
- 兩個專案用訊息佇列通訊佇列
- 有名訊號量實現消費者生產者問題
- 網路通訊2:TCP通訊實現TCP
- 兩個 Node.js 程式如何在h5直播原始碼中實現通訊?Node.jsH5原始碼
- offer通過--7兩個棧實現佇列-2佇列
- offer通過--8兩個棧實現佇列-2佇列
- linux程式間通訊--管道(PIPE & FIFO)Linux
- 採用管道進行通訊的例子
- 溫故之.NET程式間通訊——管道
- 【IPC程式間通訊之二】管道PipeC程式
- Windows程式通訊之一看就懂的匿名管道通訊Windows