兩個有名管道實現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|程式間通訊--有名管道學習筆記筆記
- 兩個視窗如何實現通訊
- 有名管道程式碼
- 利用windows api實現程式通訊(命名管道)WindowsAPI
- 實現兩個視窗通訊方法之postMessage
- Java的通過管道來實現執行緒通訊Java執行緒
- Linux系統程式設計—有名管道Linux程式設計
- 程序間通訊(1)-管道
- 管道流間的通訊
- MQ實現兩個應用系統之間的通訊-----實際操作(二)MQ
- 兩個Arduino 與兩個MCP2515 CAN模組通訊實現(用到ec11編碼器)UI
- linux 程式間通訊之管道Linux
- Linux 的程式間通訊:管道Linux
- offer通過--7兩個棧實現佇列-2佇列
- offer通過--8兩個棧實現佇列-2佇列
- 程式間通訊——POSIX 有名訊號量與無名訊號量
- 併發技術3:管道通訊
- 系統程式設計——管道通訊程式設計
- linux程式間通訊--管道(PIPE & FIFO)Linux
- 兩個 Node.js 程式如何在h5直播原始碼中實現通訊?Node.jsH5原始碼
- 兩個專案用訊息佇列通訊佇列
- 溫故之.NET程式間通訊——管道
- 採用管道進行通訊的例子
- 利用管道Pipelines做程序間的通訊
- 網路通訊2:TCP通訊實現TCP
- Windows程式通訊之一看就懂的匿名管道通訊Windows
- 前端--任意數求和(有名函式實現)前端函式
- java實現UDP通訊JavaUDP
- 20.2、python程式間通訊——佇列和管道Python佇列
- ZYNQ有兩個CPU?(三)——SGI非同步通訊非同步
- 基於DotNetty實現一個介面自動釋出工具 - 通訊實現Netty
- 通過Guava實現兩個包含不同物件的List合併成一個ListGuava物件
- 兩個棧實現佇列佇列
- 動畫-CAShapeLayer實現QQ訊息紅點拖拽效果動畫
- angular + express 實現websocket通訊AngularExpressWeb
- Java實現TCP通訊程式JavaTCP
- 使用Java實現WebSocket通訊JavaWeb