open命令适用于二进制文件操作

时间:2014-09-17 06:45:41

标签: c linux file sockets system

我有一个FTP应用程序通过TCP套接字发送二进制文件。

我已经使用open打开文件并读取二进制文件,就像它们是字符串文件一样(程序可以正常处理文本文件),然后通过TCP发送它们。

但是我在另一端挣扎着输出。我想知道fopen是否更适合二进制文件,或者二进制文件可以被视为文本文件。

1 个答案:

答案 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