如何检查fwrite()是否在C中工作?

如何检查fwrite()是否在C中工作?,c,file,struct,io,fread,C,File,Struct,Io,Fread,我试图读取输入文件中256字节的任何数据,并将它们的信息构造成一个结构,然后将该结构写入输出文件。因为我不能简单地打开并读取输出文件,我想知道我应该做些什么来确保我已经成功地将结构写入我的输出文件?检查fwrite-的返回值,即阅读手册页您可以再次读取该文件并将其转换到您的结构并检查其值。如果您打开该文件进行读取和写入,您还应该能够fseek到开头(偏移量0)并从那里重新读取文件。这是假设您可以打开文件一起读写。按照chux的建议检查返回代码。在十六进制编辑器中打开输入和输出文件,并比较前256

我试图读取输入文件中256字节的任何数据,并将它们的信息构造成一个结构,然后将该结构写入输出文件。因为我不能简单地打开并读取输出文件,我想知道我应该做些什么来确保我已经成功地将结构写入我的输出文件?

检查
fwrite
-的返回值,即阅读手册页

您可以再次读取该文件并将其转换到您的结构并检查其值。

如果您打开该文件进行读取和写入,您还应该能够
fseek
到开头(偏移量0)并从那里重新读取文件。这是假设您可以打开文件一起读写。

按照chux的建议检查返回代码。在十六进制编辑器中打开输入和输出文件,并比较前256个字节。Emacs有一个足够好用的

您有几个基本问题。首先,您需要验证数据 你所读的是有效的。其次,构建了您的数据结构 在内存中,您需要将其写入另一个文件。第三,你想要什么 为了保证这些内容写得正确,但你不能说 为了验证输出文件的正确性,允许您执行的操作

读取中的数据很容易-fread()是您的朋友。我会读的 所有这些都被放入适当大小的(空隙*)中

我过去在类似的数据输入/数据输出用例中所做的是 包括一个简单(取决于应用程序)校验和作为第一个元素 在输出数据结构中。使用bcopy()或memcpy()传输读入 将数据转换为输出结构,然后计算数据的校验和,然后 更新校验和字段

最后,将所有数据写入输出文件,并检查返回值 值-写入的对象数。如果有错误(写入的编号 小于期望值),您需要检查errno并处理错误情况。 在我的手册副本(Solaris 11.x)中,可能的错误代码 fwrite(3c)是用于fputc(3c)的

最后,您可以确定是否已写入足够的字节 通过比较stat()调用中的statbut立即返回到输出文件 打开输出文件后,会立即创建一个fwrite()+fclose()
已返回。

您能发布一些代码来向我们展示您迄今为止的尝试吗?检查
fwrite()
返回值似乎是一个很好的开始。如果您按原样将结构写入文件,请注意填充!“既然我不能简单地打开和读取输出文件”-为什么不呢?输入文件和输出文件不一样,我们暗示返回值?但是,即使我写了相同数量的元素,我怎么知道输出文件中的数据是正确的呢?我应该如何转换它?只需读取文件并使用memcpy:myobject obj将其内容复制到您的结构中;memcpy(&obj,文件缓冲区,读取字节计数);