0
我有一个单一的功能void* producer(void* param)
传递给多个POSIX线程,其目标是读文件的每一行或string (char*)
阵列的每一行,并对其进行处理。既读取文件和字符串数组用C
问题:如何使这个函数能够优雅地适应这两个可能的输入? (我猜第一个将是文件的文件名或FILE*
)。
到目前为止,该功能只能读取一个文件,这里是它的代码:
void* producer(void* param)
{
FILE* filep = *(FILE*)param;
char line[256];
while (fgets(line, 256, filep) != NULL)
{
processLine(line);
}
return NULL;
}
令人毛骨悚然:)最好使'param'指向一个结构或联合,其中*明确*告诉它使用什么。 – usr2564301
使用带有'mmap()'的内存映射文件,只需为两个可能性传递'char *'即可。即使代码是相同的。 –
@Frankie_C这是不真实的 - 字符串将被零终止,而内存映射文件不会。 (如果文件大小与页面大小一致,则访问超过末尾的字节将崩溃。)要覆盖这两个选项,OP将需要将字符串大小和字符串一起发送,这会带回原始问题如何打包两件事情在一个'void *'中。此外,内存映射在C中不可移植,并且如果文件不是常规文件(例如,如果它是管道),则映射可能会失败。 – user4815162342