Создайте файл, переместите 1MB с помощью lseek () и затем запишите один байт в файл - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь создать файл с помощью open (), затем переместить 1MB с помощью lseek () и, наконец, необходимо записать 1 байт в этот файл.

Вот мой код:

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

int f_open(const char *name);

int f_open(const char *name){
   int dskr;
   dskr = open( name, O_CREAT );
   if( dskr == -1 ){
      perror( name );
      exit(1);
   }
   printf( "dskr = %d\n", dskr );
   return dskr;
}

int main( int argc, char *argv[] ){
   int d;
   int f;
   char buf[20];

   if( argc != 2 ){
      printf( "Naudojimas:\n %s failas_ar_katalogas\n", argv[0] );
      exit( 255 );
   }
   d = f_open( argv[1] );

   lseek( d, 1, SEEK_SET );

   f = write( d, buf, 1);

   return 0;
}

Файл создан правильно, но я не уверен, что ход 1MB работает хорошо, а также запись не работает.Я не уверен, потому что программа работает правильно, но ее размер равен 0.

Что я делаю не так?

1 Ответ

2 голосов
/ 27 апреля 2019

Несколько ошибок:

   dskr = open( name, O_CREAT );

Флаги для open() должны включать один из O_RDONLY, O_WRONLY или O_RDWR.Таким образом, вы, вероятно, хотите O_WRONLY | O_CREAT.

   lseek( d, 1, SEEK_SET );

Смещение lseek в байтах.Если вы хотите найти 1 мегабайт, вы должны преобразовать это в байты.Удобный и читаемый способ - написать 1024*1024.

Кроме того, вам следует проверить возвращаемое значение lseek и сообщить о любых ошибках соответствующим образом.

   f = write( d, buf, 1);

Вы никогда не инициализировались buf[0], поэтому вы пишете один байт мусора.(В любом случае, нет смысла иметь buf длиной 20 байт, если вы никогда не собираетесь использовать другие 19.)

Кроме того, вам следует проверить возвращаемое значение write и обработать ошибки илишорт пишет соответственно.

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