Чтение файловых байтов, когда задано как <в терминале с использованием C - PullRequest
0 голосов
/ 31 марта 2011

Я много смотрел и не могу найти это, я уверен, что ищу не ту вещь.

В любом случае мне нужно прочитать файл, указанный в терминале, и вывести байт-код,Я могу сделать это достаточно легко, если я вручную введу имя файла как char *, но я не знаю, с чего начать.

Пример будет в терминале Linux: $./a.out <test.exe

И он должен напечатать в терминал test.exe в виде байтового кода.Заранее благодарю за любую помощь.

Ответы [ 4 ]

5 голосов
/ 31 марта 2011

С перенаправлениями командной строки программа использует stdin для чтения и stdout для записи.

Скомпилируйте и запустите это, например:
./a.out < source.c или ./a.out < source.c > source.upper...

#include <ctype.h>
#include <stdio.h>
int main(void) {
    int ch;
    while ((ch = getchar()) != EOF) {
        putchar((unsigned char)ch);
    }
    return 0;
}

Если, с другой стороны, вы хотите указать имя файла в качестве параметра командной строки, вы можете использовать argv, чтобы получить имя файла, как, например, ./a.out filename.txt

#include <stdio.h>
int main(int argc, char **argv) {
    if (argc > 1) {
        printf("processing %s\n", argv[1]);
    } else {
        printf("no command line parameter given.\n");
    }
    return 0;
}
1 голос
/ 31 марта 2011

С помощью оператора «<» в bash вы перенаправляете стандартный ввод, который вместо терминала является заданным файлом. </p>

Таким образом, чтобы прочитать байт, вы должны выполнить только getchar ().И тогда вы можете делать с ней все, что захотите.Когда файл закончится, вы получите EOF.

0 голосов
/ 31 марта 2011

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

0 голосов
/ 31 марта 2011

Когда вы используете перенаправление файлов в оболочке, файл передается в стандартный ввод.Таким образом, вы можете просто читать со стандартного ввода, используя getchar (или аналогичное), как обычно.

Ваша программа не имеет возможности (в стандартном C) узнать, подается ли ей файл или нетон работает в интерактивном режиме в терминале.Лучше всего просто не думать об этом.: -)

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