如何使用文件描述符使用posix库在C中写入和读取二进制数据到文件?

问题描述

我想使用函数 write() 和 read() 将一些二进制数据写入文件“something.dat”。我得到文件描述符作为参数。目标是写入由','分隔的二进制数据:data,data1,data2,data3,然后从二进制文件中再次读取它。我不允许使用 fopen()、fwrite() 和 fread()

我已经搜索了二进制示例,但大多数其他示例都带有文件指针或函数,这不是一个选项。我能得到一个简单的例子如何做到这一点吗?剩下的我自己做。

解决方法

POSIX $hostname = "example.com" $username = "username" $password = "password" $hostkey = "c4:26:18:cf:a0:15:9a:5f:f3:bf:96:d8:3b:19:ef:7b" $session = "Dummy" $key = "HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions\$session" New-Item -Path $key -Force | Out-Null New-ItemProperty -Path $key -Name HostName -Value $hostname | Out-Null New-ItemProperty -Path $key -Name UserName -Value $username | Out-Null New-ItemProperty -Path $key -Name KEX ` -Value "ecdh,dh-gex-sha1,dh-group14-sha1,rsa,dh-group1-sha1,WARN" | Out-Null & plink $session -pw $password -hostkey $hostkey /read() 函数是隐式二进制的。只写数据:

write()

您似乎对 uint8_t data[] = { 0x00,0xFF,0xDE } ; ssize_t written = write( fd,data,sizeof(data) ) ; "b"/"t" 开放模式感到困惑。这在这里无关紧要 - 它只是二进制。即使使用 fopen()(文本)打开模式只影响行尾转换,在行尾约定为 LF 的平台(如 Linux)上,它也完全没有影响。

“目标”中逗号分隔的二进制数据的概念是有缺陷的。文本文件不包含字形,它们由二进制代码组成,表示平台可能会呈现为字形的字符 - 例如在显示器上。

逗号由二进制序列 0010 1100(十进制 44)表示,因此您不能用逗号分隔二进制数据并将逗号与任何其他二进制数据区分开来。