Итак, у меня есть этот проект, где мне нужно открыть файл и распечатать содержимое на C, но я должен использовать системные вызовы unix. Однако я не могу понять, почему ничего не печатает. Я пытаюсь запустить код, но он, кажется, пропустит прямо к ошибке закрытия. Я знаю, что мне нужно unistd.h, у меня уже есть это.C: невозможно распечатать из файла
#define MAXBUF 4096
int main(int argc, char* argv[]){
int x = 0, y, z = 1, a; //x: Counter, Y:int for open, z:another counter, a:int for read
char buff[MAXBUF]; //set buffer size
int fe,fn,ft; //fe = found E, fn = found n, ft = found T
if((y = open(argv[2], O_RDONLY)) == -1){
errHandler("Couldn't open ", argv[2]);
}
.
.
.
if(fn == 1){ //if fn returned true
printf("%d ", z++);
}
while((a = read(y, buff, MAXBUF)) > 0){
if (buff == '\n' && fe && fn) //<--
printf("$\n%4d: ", z++);
else if (buff == '\n' && fe)
printf("\n"); //Flags for various options
else if (buff == '\t' && ft)
printf("^T");
else if (buff == '\n' && fn)
printf("\n%4d: ", z++); //<--
else
printf("%c", buff);
}
close(y);
if (close(y) == -1)
printf("Unable to close file");
return 0;
}
Редактировать: Вот объявления. «.» пропускают код, который просто устанавливает флаги.
Вы дважды закрыли файл. Вы должны удалить первый экземпляр закрытия. –
Что такое 'buff'? Типичная подпись для 'read' требует, чтобы она была' void * ', но вы сравниваете ее с' char'. – jwodder
Отправьте сообщение [MCVE] (https://stackoverflow.com/help/mcve). Мы можем видеть некоторые возможные проблемы в вашем коде (такие как указано jwodder), но мы не можем дать окончательный ответ, если вы не покажете весь соответствующий код в MCVE. Например, логика опирается на значения переменных, которые вы не показывали ('fe',' fn', 'ft' и т. Д.). – kaylum