完全在内存中的文件 *
Completely in-memory FILE *
我正在编写一些代码来执行一些读取 TCP 套接字的 C 代码的集成测试。代码的编写方式使我可以轻松地传递任何 FILE *
,因此我最初测试代码的想法是使用 UNIX 套接字,而不是在测试过程中完全伪造网络交互。我唯一的挂断是 UNIX 套接字需要一个文件路径来创建套接字,这意味着我需要处理 finding/creating/destroying 一个独特的临时目录的复杂性,并确保每个单独的测试都在其中获得一个唯一的套接字名称目录。管道具有 属性 一切都在内存中的特性,因此它们很容易设置/拆除。但是管道只是单向的,它们不能符合我需要的FILE *
接口。
引用 Nominal Animal
,如果他们提交评论作为答案,我将删除并接受他们的评论。
You can create a connected pair of sockets using socketpair()
. For example, int sockfd[2], err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd);
creates a connected pair of Unix domain stream sockets if err == 0
(see strerror(err)
for reason of failure otherwise). One end is sockfd[0]
, and the other is sockfd[1]
我正在编写一些代码来执行一些读取 TCP 套接字的 C 代码的集成测试。代码的编写方式使我可以轻松地传递任何 FILE *
,因此我最初测试代码的想法是使用 UNIX 套接字,而不是在测试过程中完全伪造网络交互。我唯一的挂断是 UNIX 套接字需要一个文件路径来创建套接字,这意味着我需要处理 finding/creating/destroying 一个独特的临时目录的复杂性,并确保每个单独的测试都在其中获得一个唯一的套接字名称目录。管道具有 属性 一切都在内存中的特性,因此它们很容易设置/拆除。但是管道只是单向的,它们不能符合我需要的FILE *
接口。
引用 Nominal Animal
,如果他们提交评论作为答案,我将删除并接受他们的评论。
You can create a connected pair of sockets using
socketpair()
. For example,int sockfd[2], err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd);
creates a connected pair of Unix domain stream sockets iferr == 0
(seestrerror(err)
for reason of failure otherwise). One end issockfd[0]
, and the other issockfd[1]