管道和插座有什么区别?

时间:2010-08-19 03:52:17

标签: c++ windows

两者都可以用于不同进程之间的通信,

有什么区别?

5 个答案:

答案 0 :(得分:4)

Windows有两种管道:匿名管道和命名管道。匿名管道(非常)与Unix管道紧密相对 - 通常用于父进程将它们设置为由子进程继承,通常连接到子进程的标准输入,输出和/或错误流。有一段时间,匿名管道的实现方式与命名管道完全不同,因此他们没有(例如)支持重叠I / O.从那时起,这已经改变,所以匿名管道基本上只是一个名称你不知道的命名管道,所以你不能按名称打开它,但它仍然具有命名管道的所有其他功能(如前面提到的重叠I / O能力。)

Windows命名管道更像是套接字。它们起源于OS / 2,它们最初是创建客户端/服务器应用程序的主要机制。它们最初是围绕NetBIOS构建的(即,用于寻址和传输的NetBIOS)。它们与Windows身份验证等紧密集成,因此您可以(例如)使用命名管道服务器模拟客户端,以限制服务器执行客户端直接登录时可以执行的操作。最近,MS为摆脱对NetBIOS的依赖而遇到了一些麻烦,但即使他们现在可以使用IP作为其传输(以及用于寻址的DNS,IIRC),它们仍然主要用于Windows机器。其他机器的主要用途是模仿Windows,例如运行Samba。

答案 1 :(得分:3)

(从http://www.perlmonks.org/?node_id=180842无耻地抄袭)

管道快速可靠,因为它们在单个主机的内存中实现,其中两个通信进程都运行。套接字速度较慢且可靠性较低,但更灵活,因为它们允许不同主机上的进程之间进行通信。

答案 2 :(得分:1)

套接字将使用某种IP协议,如TCP / IP或UDP,因此速度较慢,但​​如果您需要通过网络进行通信,则代码将更具可移植性。还有第三种共享内存方法和第二种Mach端口(在这种情况下,我不确定它是否适用于Windows)

答案 3 :(得分:0)

(脱离我的头顶)

管道:一端有一个小碗的管子;用于吸烟

插座:插入某物(管道,探针或骨头末端)的插座

无论如何:

  

“管道和管道之间的主要区别   插座是管道需要共同的   父进程设置   通讯渠道。一个连接   套接字之间可以设置两个   不相关的过程,可能存在   在不同的机器上。“

答案 4 :(得分:-4)

它们都具有相同的功能,唯一的区别是管道效率更高,因为它们最接近互联网的准系统。套接字是一系列管(管道)之上的抽象,因此它们更慢(就像java比本机汇编代码慢)。