Проблемы с чтением из файла.читать () системный вызов - PullRequest
0 голосов
/ 28 января 2019

Когда я пытаюсь прочитать данные из файла и распечатать их, printf выводит на терминал пустую строку.

Использование: Ubuntu 16.04.

gcc версия5.4.0.

ядро: 4.15.0-43-generic

Попытка:

add fsync вызов после записиданные.

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

#define SIZE 6

int main()
{
   int ret = -1;
   char buffer[SIZE] = { 0 };
   int fd = open("data.txt", O_CREAT | O_RDWR, 0666);

   if (fd < 0)
   {
   perror("open()");
   goto Exit;
   }

   if (write(fd, "Hello", 5) < 0)
   {
       perror("write()");
   goto Exit;
   }

   fsync(fd);

   if (read(fd, buffer, SIZE - 1) < 0)
   {
   perror("read()");
   goto Exit;
   }

   printf("%s\n", buffer);
   ret = 0;

   Exit:
        close(fd);
        return ret;
}

Ожидается: должен записывать и считывать данные из / в файл.

Факт: данные записываются в файл,После прочтения данных printf печатает пустую строку.

1 Ответ

0 голосов
/ 28 января 2019

После записи нужно перемотать файл.

Исправление:

lseek(fd, 0, SEEK_SET);

Обратите внимание, что обычно вам не нужно инициализировать нулевые буферы чтения, что является пустой тратой времени.Лучше использовать возвращаемое значение read / recv, чтобы определить длину полученных данных, и при необходимости обнулить их вручную.

Исправить:

ssize_t r = read(fd, buffer, SIZE - 1);
if (r < 0)
    // handle error
buffer[r] = 0; // zero-terminate manually.
printf("%s\n", buffer);
...