Только чтение и запись только с использованием open () - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно открыть один файл только для чтения и всего лишь для записи - только запись.

Вот мой код:

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

int main( int argc, char *argv[] ){
   if( argc != 2 ){
      printf( "Naudojimas:\n %s failas_ar_katalogas\n", argv[0] );
      exit( 255 );
   }

   int fd;

   fd = open( argv[1], O_RDONLY );
   if(fd == -1){
      printf("Nepavyko atidaryti skaitymui.\n");
      exit(1);
   }
   else {
      printf( "Failas %s skaitymui atidarytas.\n", argv[1] );
   }

   int fd1;

   fd1 = open( argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644 );
   if(fd1 == -1){
      printf("Nepavyko atidaryti rasymui.\n");
      exit(1);
   }
   else {
      printf( "Failas %s rasymui atidarytas.\n", argv[2] );
   }

   return 0;
}

Если я напишу только ОДИН аргумент, я получу вывод, что первый файл успешно открыт, но если я добавлю ДВА аргумента, я не получу вывод.

Ожидаемые результаты: файл, который упоминается в первом аргументе, открывается как доступный только для чтения, и файл, который упоминается во втором аргументе, открывается как запись только для записи (ps, если файл со вторым аргументом отсутствует, то его следует создать, если он существовал) , просто удалите данные из него.)

1 Ответ

1 голос
/ 28 апреля 2019

Ваш argc чек неверен.Значение argc - это количество допустимых элементов в массиве argv, , включая «команду» в argv[0].Если есть два аргумента, то значение argc будет равно 3.

Это должно быть довольно легко увидеть, в первую очередь потому, что если вы предоставили программе два аргумента, то сообщение об ошибке должно появитьсябыли написаны.И если вы использовали отладчик, то это должно было бы сделать это очевидным.

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