通信管道由哪几部分组成

通信管道由哪几部分组成,第1张

通信管道是由人孔、手孔、管道三部分构成的。

管道通信即发送进程以字符流形式将大量数据吵缓送入管道,接收进程可从管道接收数据,二者利用管道进行通信。

无论是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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12338114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存