我有一个FTP应用程序通过TCP套接字发送二进制文件。
我已经使用open打开文件并读取二进制文件,就像它们是字符串文件一样(程序可以正常处理文本文件),然后通过TCP发送它们。
但是我在另一端挣扎着输出。我想知道fopen是否更适合二进制文件,或者二进制文件可以被视为文本文件。
答案 0 :(得分:1)
在Linux上,没有二进制或文本文件的概念(与Windows相反,它是相关的),它只出现在C99标准fopen(3)函数中,该函数说:
模式字符串还可以包含字母' b'要么作为最后一个 字符或作为两者中任何一个字符之间的字符 - 上面描述的字符串。这是严格的 与C89的兼容性并没有效果; ''被忽略了 符合POSIX标准的系统,包括Linux。 (其他系统可能会对待 文本文件和二进制文件的方式不同,并添加' b'可能是一个 如果您对二进制文件执行I / O并期望您的程序,那么这是个好主意 可以移植到非UNIX环境。)
当然您可以直接使用open(2)系统调用(BTW,fopen
使用它)。
但是,二进制文件的可移植性(例如,由于endianness问题)要比文本文件少得多。阅读serialization,因此可能更喜欢文字格式和protocols,例如JSON到二进制的。
关于客户端的FTP,请考虑使用现有的库,如libcurl