чтение файла с использованием fgetc добавляет FF в конце - PullRequest
0 голосов
/ 25 апреля 2018

Я читаю файл, используя 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

Ниже приводится содержимое файла (в шестнадцатеричном формате): последняя строка входного файла (общий размер файла = 1878):

0000750: 0000 1567 d48d ... g ..

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

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

Причина, по которой вы получаете дополнительные 'hff в конце записанного файла, связана с тем, как работает $feof (или, как правило, функция foef C).Проще говоря, он не проверяет, находится ли следующее чтение за концом файла, но проверяет ли предыдущее чтение конец файла.Таким образом, если вы читаете символ за символом (байт за байтом), используя $fgetc, $feof вернет истину только после того, как $fgetc прочитает конец файла и вернет EOF сам (то есть -1 или'hff если преобразовано в logic [7:0]).Вы должны проверять это состояние ошибки каждый раз, когда читаете байт, что-то вроде этого:

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