使用fgetc读取的文件最后添加了FF

时间:2018-04-25 18:10:48

标签: system-verilog fgetc

我正在使用fgetc读取文件。文件读取以偏移量开始。最后我看到8'hFF附加在文件的末尾。我期待文件中的6个字节,但是看到7个字节。我不知道为什么会发生这种情况。有什么想法吗?

以下是我的代码:

module file_read();
   integer fd,fd1,file_char,status;
   logic [7:0] captured_data;

   initial begin
        fd = $fopen("input_file", "rb");
        fd1 =$fopen("write_file","w");
        status=$fseek(fd,1872,0);

        assert (status);
      //  while ($fgetc(fd) != `EOF) begin
          while (!$feof(fd)) begin
          file_char=$fgetc(fd);
          $display("file char is %h",file_char);
         end
   end // initial begin

以下是文件内容(十六进制): input_file的最后一行(文件总大小= 1878):

0000750:0000 1567 d48d ... g ..

WRITE_FILE: 0000000:0000 1567 d48d ff ... g ...

谢谢!

1 个答案:

答案 0 :(得分:0)

您在书面文件末尾获得额外'hff的原因是$feof(或通常foef C函数)的工作方式。简单地说,它不会检查下一次读取是否在文件末尾,而是先前的读取是否从文件末尾读取。因此,如果您使用$fgetc逐个字符地逐字节读取,$feof将仅在$fgetc读取文件末尾时返回true,并返回EOF }本身(即-1或'hff如果转换为logic [7:0])。每次读取一个字节时都应检查此错误情况,如下所示:

integer fd, ch;
...
fd = $fopen("file.bin", "rb");
...
while ((ch = $fgetc(fd)) != -1) begin
  $display(ch);
end