c - unix域套接字VS命名管道?

在查看了一个名为 socket 的 unix 之后,我认为它们是命名管道。我查看了名称管道,并没有看到太大的区别。我看到它们的初始化方式不同,但这是我唯一注意到的。两者都使用 C 写/读功能,工作方式与 AFAIK 相似。

unix 域套接字和命名管道有什么区别?我什么时候会选择一个而不是另一个?我应该默认使用哪个(比如我在 C++ 中默认使用 vector 而不是使用双端队列、列表或其他任何我需要的东西)?

最佳答案

UNIX 域套接字通常比命名管道更灵活。它们的一些优点是:

  • 您可以将它们用于两个以上的进程通信(例如,一个可能有多个客户端进程连接的服务器进程);
  • 它们是双向的;
  • 它们支持在进程之间传递经过内核验证的 UID/GID 凭据;
  • 它们支持在进程之间传递文件描述符;
  • 它们支持数据包和序列数据包模式。

要使用其中许多功能,您需要使用 send()/recv() 系列系统调用,而不是 write()/read().

https://stackoverflow.com/questions/9475442/

相关文章:

python - 如何在 Python 中将新行附加到旧的 CSV 文件?

linux - 在 shell 中获取文件大小(以字节为单位)的可移植方法

linux - 在 Linux 的沙箱中运行不受信任的 C 程序,阻止它打开文件、 fork 等?

python - 计算两个 Python 字典中包含的键的差异

linux - 查找文件并将它们 tar(带空格)

linux - 命令行中的处理器/内核数

python - 使用 Python 解析 HTML

python - 将多个函数应用于多个 groupby 列

python - 为 Python 项目添加 .gitignore 文件的最佳实践?

python - 如何从字符串中删除所有空格