我有第三方C代码将数据写入文件。我想修改该代码,以便将完全相同的数据写入数据报套接字。
指向FILE
的指针被处理到第三方代码以确定要使用的文件。数据仅使用fwrite()
写入文件。
如果代码使用write()
而不是fwrite()
,那么一切都会好的,因为write()
适用于套接字和文件。它期望一个整数作为文件描述符,它是socket()
和open()
返回的数据类型。
但是,由于第三方代码使用fwrite()
,因此这项任务并不那么容易。我想知道完成这项任务的最佳方法是什么。
我是否应该在内部使用fwrite()
编写与原始fwrite()
执行相同工作的write()
函数?或者有一个hack将整数文件描述符“强制转换”为FILE*
?
答案 0 :(得分:3)
您可以使用FILE *
fdopen
FILE *fdopen(int fd, const char *mode);
我希望您使用顺序数据报协议(即Unix数据报套接字,而不是UDP套接字),否则,您的数据将会搞砸。
如果您正在使用UDP:数据包可以被任意删除或重新排序,并且因为使用FILE *
的代码假定它正在写入磁盘,您将获得当你试图将所有东西放在一起时,一团糟。