Программа, которая принимает один аргумент командной строки и выводит содержимое файла в стандартный формат.

Мне была назначена программа для написания, которая использует вызовы файловой системы, чтобы получить аргумент командной строки (при условии, что вы передаете адрес текстового файла) и вернуть содержимое указанного файла. Пока у меня есть этот код, но я не могу понять, почему мой компилятор выдает мне ошибки с точки зрения распознавания текстового файла, переданного в качестве аргумента, наряду с печатью информации, полученной из файла. Любая помощь / помощь очень ценится.

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



int main(int argc, char *argv[]){




int FP;
ssize_t bytes;

char buffer [100];

if(argc == 1){

FP = open(argv[1], O_RDONLY);
printf("Program name is : %s", argv[0])
bytes = read(FP, buffer,sizeof(buffer) -1);
printf("%s", bytes);
close(FP);

}






return 0;


}

1 ответ

Решение

Следующий предложенный код:

  1. включает в себя комментарии к вопросу
  2. реализует желаемую функциональность
  3. надлежащие проверки на ошибки
  4. документы, почему заголовочные файлы включены. В общем, если вы не можете указать, почему файл заголовка включен, не включайте его. (тогда компилятор скажет вам, нужен ли вам этот заголовочный файл и почему
  5. при компиляции всегда включайте предупреждения, затем исправляйте эти предупреждения. (за gccпри минимальном использовании: -Wall -Wextra -pedantic -Wconversion -std=gnu11)

а теперь предложенный код.

#include <stdio.h>   // fopen(), perror(), fgets(), fprintf(), printf(), FILE
#include <stdlib.h>  // exit(), EXIT_FAILURE


#define MAX_INPUT_LEN 100

int main(int argc, char *argv[])
{
    FILE *fp;
    char buffer [ MAX_INPUT_LEN ];

    if(argc != 2)
    {
        fprintf( stderr, "USAGE: %s fileName\n", argv[0] );
        exit( EXIT_FAILURE );
    }

    // implied else, correct number of command line parameters

    printf( "Program name is : %s", argv[0] );
    printf( "file to read: %s\n", argv[1] );

    fp = fopen( argv[1], "r" );
    if( NULL == fp )
    {
        perror( "fopen failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, fopen successful

    while( NULL != fgets( buffer, sizeof buffer, fp ) )
    {
        printf( "%s", buffer );
    }

    fclose( fp );

    return 0;
}
Другие вопросы по тегам