gpt4 book ai didi

c - socketpair() 以只读方式打开套接字端?

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:41 26 4
gpt4 key购买 nike

我正在处理一些进程间通信,我正在使用 socketpairs 进行一些处理。我遇到了一些奇怪的行为,不幸的是我无法用一小段代码复制这些行为。我正在以标准方式打开一对套接字:

// setup a socket for read/write functionality
if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
<handle error>
}

但是当我去查看我进程的/proc/[pid]/fd 文件夹时:

total 0
dr-x------ 2 user user 0 May 14 16:37 ./
dr-xr-xr-x 8 user user 0 May 14 16:37 ../
lrwx------ 1 user user 64 May 14 16:38 1 -> /dev/pts/4
l-wx------ 1 user user 64 May 14 16:38 10 -> pipe:[19185636]
lr-x------ 1 user user 64 May 14 16:37 11 -> anon_inode:[eventpoll]
lr-x------ 1 user user 64 May 14 16:38 12 -> socket:[19189280]
lr-x------ 1 user user 64 May 14 16:37 13 -> socket:[19189281]
lrwx------ 1 user user 64 May 14 16:38 2 -> /dev/pts/4
lrwx------ 1 user user 64 May 14 16:38 3 -> /run/shm/spork_8902
lrwx------ 1 user user 64 May 14 16:38 4 -> socket:[19184133]
lrwx------ 1 user user 64 May 14 16:38 5 -> anon_inode:[eventpoll]
l-wx------ 1 user user 64 May 14 16:38 6 -> /dev/null
l-wx------ 1 user user 64 May 14 16:37 7 -> anon_inode:[eventpoll]
l-wx------ 1 user user 64 May 14 16:37 8 -> anon_inode:[eventpoll]
lr-x------ 1 user user 64 May 14 16:37 9 -> anon_inode:[eventpoll]

套接字已以只读方式打开(此处为 fds #12/13)。

我没有在我的代码中做任何改变文件权限的事情,而且 valgrind 也没有指示任何不明智的内存访问。有谁知道是什么导致了这种情况?

最佳答案

套接字的权限只影响在创建套接字后尝试连接到套接字的进程。 socketpair() 在创建套接字时将进程连接到套接字,因此此时权限无效。将它们设置为只读可防止与套接字建立新连接,这是适当的,因为它应该是创建该对的进程以及它将它们传递给的任何进程的私有(private)通信。

这类似于创建新文件时权限的工作方式。你可以这样写:

open(filename, O_WRONLY | O_CREAT, 0400);

创建一个具有只读权限的文件,但以写入模式打开它。权限仅影响以后打开文件的尝试,而不影响创建文件的操作——它始终可以访问文件。

关于c - socketpair() 以只读方式打开套接字端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37232636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com