所以我有这个项目,我需要打开一个文件并打印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