setsockopt() 等效于非套接字文件描述符?

setsockopt() equivalent for non-socket file descriptors?

是否有人知道 setsockopt() 的等价物,它适用于基于非套接字的文件描述符?

具体来说,考虑这段代码:

int on = 1;
setsockopt(socketfd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(int));

一切都很好,现在我们可以避免 SIGPIPE 并在编写时引用 EPIPE。但这仅适用于使用 accept()、socket() 等打开的套接字文件描述符

我正在尝试为通过 pipe() 调用打开的文件描述符获得类似的功能,setsockopt() 立即将其拒绝为非套接字文件描述符。

对于由 pipe() 或 open() 打开的描述符,是否有与上述 (setsockopt()) 等效的方法?

没有等效项,但您可以使用 socketpair 创建 Unix 套接字。

如果您的最终目标是完全避免信号,您可以使用 here

中所述的初始化和清理函数

也可以在这里看到很好的例子: Automatically executed functions when loading shared libraries

只需编写一个 init 函数来处理您希望避免的信号,每个加载您的库的程序都会自动拥有您的处理程序

我必须说这一个奇怪的必要性,你能更具体地说明你试图解决的实际问题吗?