Простая программа создания - lseek - чтения на C - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь создать простую программу, которая создает файл, пишет в него, затем перемещает назад указатель и, наконец, читает его.

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>

int main(){ 

  int fd = creat("/home/alum/Class/ej",S_IRWXU);
  if(fd==-1){
    printf("Error %d\n",errno);
    return 1;
  }

  ssize_t size = write(fd, "Halo",4);
  if(size==-1){
    printf("Error %d\n",errno);
    return 1;
  }

  char string[50];
  lseek(fd,0,SEEK_SET);  
  while((size = read(fd, string, 49)) >0){    
    printf("Read[%d]: %s\n",size,string);
  }

  printf("Size: %d\n",size);

  if(size==-1){
    printf("Error %d\n",errno);
    return 1;
  }

  int c=close(fd);
  if(c==-1){
    printf("Error %d\n",errno);
    return 1;
  }

  return 0;
}

Моя проблема в том, что "lseek", кажется, неработатьЯ всегда получаю размер «-1» при попытке прочитать, поэтому я предполагаю, что не возвращаюсь к началу файла ... Есть предложения?

Я видел некоторые вопросы, связанные с lseekно я не нашел решения своей проблемы.

РЕДАКТИРОВАТЬ:

Я изменил

  int fd = creat("/home/alum/Class/ej",S_IRWXU);

на

  int fd = open("/home/alum/Class/ej",O_CREAT|O_RDONLY|O_WRONLY|O_TRUNC);

, а также попытался

  int fd = open("/home/alum/Class/ej",O_CREAT|O_RDONLY|O_WRONLY|O_TRUNC,0700);

Как и предлагалось, но я продолжаю получать ту же ошибку.

1 Ответ

0 голосов
/ 27 ноября 2018

Мне пришлось использовать

int fd = open("/home/alum/Class/ej",O_CREAT|O_RDWR|O_TRUNC,0700);

для создания файла, так как «creat» не работает для чтения ( manpage ) и «open» не работал для меня как O_RDWRесли бы я использовал O_RDONLY | O_WRONLY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...