所以我有這個項目,我需要打開一個文件並打印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