如何重写POSIX C代码以使用数据报套接字而不是文件

时间:2012-04-05 09:04:15

标签: c sockets udp posix

我有第三方C代码将数据写入文件。我想修改该代码,以便将完全相同的数据写入数据报套接字。

指向FILE的指针被处理到第三方代码以确定要使用的文件。数据仅使用fwrite()写入文件。

如果代码使用write()而不是fwrite(),那么一切都会好的,因为write()适用于套接字和文件。它期望一个整数作为文件描述符,它是socket()open()返回的数据类型。

但是,由于第三方代码使用fwrite(),因此这项任务并不那么容易。我想知道完成这项任务的最佳方法是什么。

我是否应该在内部使用fwrite()编写与原始fwrite()执行相同工作的write()函数?或者有一个hack将整数文件描述符“强制转换”为FILE*

1 个答案:

答案 0 :(得分:3)

您可以使用FILE *

将套接字转换为fdopen
FILE *fdopen(int fd, const char *mode);

我希望您使用顺序数据报协议(即Unix数据报套接字,而不是UDP套接字),否则,您的数据将会搞砸。

如果您正在使用UDP:数据包可以被任意删除或重新排序,并且因为使用FILE *的代码假定它正在写入磁盘,您将获得当你试图将所有东西放在一起时,一团糟。