Мне было интересно ... как вы читаете байты по одному из двоичного файла? В качестве примера, я хотел бы читать байты по одному из некоторого двоичного файла, а затем записывать эти точные байты в некоторый выходной файл (в основном, очень базовая реализация команды cp
). Мой текущий код C выглядит так:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char**argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s <output file>\n", argv[0]);
return 1;
}
FILE *outfile;
outfile = fopen(argv[1], "w");
unsigned char c;
char temp;
int tracker = 0;
// Use temp because unsigned char will never be EOF
while ((temp = getchar()) != EOF) {
c = (unsigned char) temp;
fprintf(outfile, "%c", c);
}
fclose(outfile);
return 0;
}
Я запускаю программу так: ./main output.au < sample.au
(.au - аудиофайл)
Тем не менее, все, что я получаю в файле output.au
, это кучка «^ @», повторяемая снова и снова. Я могу нормально воспроизводить аудиофайл sample.au
, но не output.au
. Я также (несколько бессмысленно) сделал diff
для двух файлов, и, как и ожидалось, они получаются по-разному.
Помощь?
Спасибо!
-kstruct
UPDATE
Спасибо всем за ответ .. мой код теперь выглядит так:
outfile = fopen(argv[1], "wb");
int c;
while ((c = getchar()) != EOF) {
fprintf(outfile, "%c", c);
}