(盡管事實上,一次讀取 1 個字符是系統開銷) 為什么以下函式在檔案內容結束后沒有停止?目前我正在運行使用command line inputs檔案路徑和終端的cmd函式。
這是代碼:
int flen(int file){
int i;
char c = 0;
for(i = 0; c != EOF; i ){
read(file, &c, 1);
}
return i;
}
int main(int argc, char *argv[]){
long long len;
int fd;
if(argc != 2){
fprintf(stderr, "Usage: %s <valid_path>\n",argv[0]);
exit(EXIT_FAILURE);
}
if((fd = open(argv[1], O_RDONLY, 0)) == -1){
fprintf(stderr, "Fatal error wihile opening the file.\n");
exit(EXIT_FAILURE);
}
len = flen(fd);
printf("%d\n", len);
exit(0);
}
我認為問題可能與EOFfor 回圈條件有關。但如果這是真的,我怎么知道檔案何時真正結束?
uj5u.com熱心網友回復:
read您應該改為測驗回傳值。
回傳值:讀取的位元組數
如果函式試圖在檔案末尾讀取,則回傳0。
如果允許繼續執行,則函式回傳-1。
long long flen(int file) {
long long i = 0;
char c;
while(read(file, &c, 1) == 1) {
i ;
}
return i;
}
另外:您與int flen()and型別不匹配long long len。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449354.html
上一篇:將檔案保存到結構
