Я пишу программу, которая заменяет каждый символ, где position % step = 0
В качестве аргументов командной строки я даю 1. file
2. character
и 3. step
. Я могу использовать только системные вызовы. Вот моя основная функция:
int main(int argc, char **argv){
assert(argc == 4);
int fdInput = open(argv[1], O_WRONLY);
if(fdInput == -1)
fatalError("Error opening input file.\n");
char c[1];
c[0] = argv[2][0];
unsigned step = atoi(argv[3]);
int fileSize;
if((fileSize = lseek(fdInput,0,SEEK_END)) < 0)
fatalError("Lseek error: Determining file size\n");
if(lseek(fdInput,0,SEEK_SET) == -1)
fatalError("Lseek error: Returning to the beginning\n");
int i;
for(i = 0; i*step < fileSize; i++)
if(step - 1 > 0){
if(lseek(fdInput, i*step - 1, SEEK_SET) == -1)
fatalError("Lseek error: Within loop\n");
if(write(fdInput, c, 1) != 1)
fatalError("Writing error\n");
}
else {
if(write(fdInput, c, 1) != 1)
fatalError("Writing error.\n");
}
close(fdInput);
return 0;
}
Пример:
ввод.txt: 123456789
./output input.txt x 3
вернет 12x45x78x
Проблема: по какой-то причине, когда я компилирую и запускаю в первый раз, все работает нормально! НО: когда я выполню это во второй раз, это не сработает. Когда я пытаюсь cat/less
input.txt
, он говорит мне, что файл двоичный.
echo "123456789" > input.txt
-> создает.txt
файл./output input.txt x 3
->12x45x78x
./output input.txt x 3
-> не будет работать (программа закончена), но:less input.txt
->input.txt" may be a binary file. See it anyway?
Как файл может быть бинарным? Это должен быть обычный текстовый файл. Что я здесь делаю неправильно? Я что-то не так делаю с open
?