gpt4 book ai didi

c - 如何创建由简单字符数组支持的文件描述符?

转载 作者:行者123 更新时间:2023-12-04 15:55:17 25 4
gpt4 key购买 nike

我有一个接收描述符的函数(你知道,open()socket() 吐出的那些东西之一),从中读取并对数据做一些事情:

int do_something(int fd);

我想测试这个功能。为了便于调试,输入数据最好紧挨着测试断言。 (因此,应该避免实际读取文件。)在我看来,理想的情况应该是这样

unsigned char test_input[] = { 1, 2, 3 };
int fd = char_array_to_fd(test_input);
ck_assert(do_something(fd) == 1234);

(ck_assert 来自 Check framework 。这只是一个典型的单元测试断言。)

有没有办法实现char_array_to_fd()?我不介意我是否需要以 NULL 终止数组或发送长度。

我想象我可以为自己打开一个套接字并在一端写入,以便测试函数在另一端接收数据。我只是不想写一些笨拙的东西,然后发现 Unix 一直以来都有一些不那么做作的东西。解决方案应该是任何 Unix 友好的。

(基本上,我要的是 C 语言中的 ByteArrayInputStream 。)

或者:我是否应该考虑以其他方式解决这个问题?

最佳答案

在 Linux 上,您可以使用 memfd_create()创建内存支持的临时文件:

unsigned char test_input[] = ...;

int fd = memfd_create( "test_input", 0 );

// write test data to the the "file"
write( fd, test_input, sizeof( test_input );

// reset file descriptor to the start of the "file"
lseek( fd, 0, SEEK_SET );

请注意,完全没有错误检查。

关于c - 如何创建由简单字符数组支持的文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009481/

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