管道通信即发送进程以字符流形式将大量数据吵缓送入管道,接收进程可从管道接收数据,二者利用管道进行通信。
无论是SQLServer用户,还是PB用户,作为C/S结构开发环境,他们在网络通信的实现上,都有一种共同的方法——命名管道。
由于当前 *** 作系统的不惟一性,各个系统都有其独自的通信戚敏协议,导致了不同系统间通信的困难。
尽管TCP/IP协议目前已发展成为Internet的标准高碰枝,但仍不能保证C/S应用程序的顺利进行。命名管道作为一种通信方法,有其独特的优越性,这主要表现在它不完全依赖于某一种协议,而是适用于任何协议——只要能够实现通信。
姓名:冯成 学号:19020100164 学院:丁香二号书院
转自:https://feixiaoxing.blog.csdn.net/article/details/7229483
【嵌牛导读】本文将介绍linux下的C语言开发中的管道通信
【嵌牛鼻子】linux C语言 管道通信
【嵌牛提问】linux下的C语言开发中的管道通信是什么?
Linux系统本身为进程间通信提供了很多的方式,比如说管道、共享内存、socket通信等。管道的使用十分简单,在创建了匿名管道之后,我们只需要从一个管道发送数据,再从另外一个管道接受数据即可。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int pipe_default[2]
int main()
{
pid_t pid
char buffer[32]
memset(buffer, 0, 32)
if(pipe(pipe_default) <0)
{
printf("Failed to create pipe!\n")
return 0
}
if(0 == (pid = fork()))
{
close(pipe_default[1])
sleep(5)
if(read(pipe_default[0], buffer, 32) >0)
{
printf("Receive data from server, %s!\n", buffer)
}
友槐 close(pipe_default[0])
}
else
{
close(pipe_default[0])
if(-1 != write(pipe_default[1], "hello", strlen("hello")))
{
printf("Send data to client, hello!\n")
}
close(pipe_default[1])
waitpid(pid, NULL, 0)
}
return 1
}
下面我们就可以开始编译运行了,老规矩分成两步骤进行:(1)输入gcc pipe.c -o pipe;(2)然顷帆后输入./pipe,过一会儿你就可以看到雀告雹下面的打印了。
[test@localhost pipe]$ ./pipe
Send data to client, hello!
Receive data from server, hello!
#include <stdio.h>#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define N 10
#define MAX 100
int child_read_pipe(int fd)
{
char buf[N]
int n = 0
while(1)
{
n = read(fd,buf,sizeof(buf))
buf[n] = '\贺者0'
printf("春拍汪Read %d bytes : %s.\n",n,buf)
if(strncmp(buf,"quit",4) == 0)
break
}
return 0
}
int father_write_pipe(int fd)
{
char buf[MAX] = {0}
while(1)
{
printf(">")
fgets(buf,sizeof(buf),stdin)
buf[strlen(buf)-1] = '\0'
write(fd,buf,strlen(buf))
usleep(500)
if(strncmp(buf,"quit",4) == 0)
break
}
return 0
}
int main()
{
int pid
int fd[2]
if(pipe(fd) <0)
{
perror("Fail to pipe")
exit(EXIT_FAILURE)
}
if((pid = fork()) <扒仔 0)
{
perror("Fail to fork")
exit(EXIT_FAILURE)
}else if(pid == 0){
close(fd[1])
child_read_pipe(fd[0])
}else{
close(fd[0])
father_write_pipe(fd[1])
}
exit(EXIT_SUCCESS)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)