linux小白在實現用c語言模擬實現linux下cat 命令時遇到判斷檔案型別的問題

時間 2021-06-02 07:33:17

1樓:dm2

為什麼不會報錯呢?

因為開啟乙個目錄是不會出錯的也就是說你的open函式執行成功,自然不會執行錯誤處理的邏輯

-------分割線-------

花了一點時間,實現了乙個簡陋版本的cat以供參考#include

#include

#include

#define CMP(a, op, b) (strcmp(a, b) op 0)

intshow_line=0

;void

do_putline

(char

*buf

)fputs

(buf

,stdout);}

void

do_output

(FILE*in

)if(feof(in

))do_putline

(buf);}

}const

char

*my_sprintf

(const

char

*fmt

,...)

intmain

(int

argc

,char

*argv

)else

FILE*in

;if(CMP

(argv[i

],==

,"-"

))else

}do_output(in

);fclose(in

);}}return0;

}截圖Linux下面許多命令都是短小精悍的,但是可以組合在一起實現非常強大的功能。

2樓:蘇菲的老爸

更合適的做法是,用stat函式獲取屬性,然後判斷(st_mode&ST_IFDIR)!=0, 如果為真,那麼它就是乙個目錄。

另外,判斷是否有讀寫許可權,正確的方法是用access()這個函式。

3樓:Ikaros

#include

#include

#include

#include

#include

#include

intmain

(int

argc

,char

*argv

)else

return0;

}可以看看 man 2 open

如果我們不以讀寫開啟,而是唯讀時。檔案描述符為3.

if((fd = open(argv[1], O_RDONLY)) == -1)

小白學習C語言,應該選用那種C語言教材?

獨孤麟 小白的話,個人比較推薦 嗨翻C語言 或者 啊哈C 這種相對淺顯易懂一點的。C primer plus 這本大部頭雖然很不錯,但對新手來說的確有點不友好,夠大夠全也意味著更容易出現枯燥的情況。如果題主不懼大部頭,那 C primer plus 是一本很不錯的入門書籍。大一新生學C語言課外輔導書...

能用c語言演算法實現嗎?

uciicu include int main int A,B,C,D,n 分為ABCD四個數,n僅為計算該程式最終迴圈次數,非必要 int a,b,c,d for A 1 A 7 A 按照題設,每個數最小為1最大為7 for B A B 7 B for C B C 7 C for D D D 7 ...

學C語言時需要學Linux嗎?

bleedingfight 不需要先學linux,但是純學C,聯絡一些語法,在linux下無疑是非常方便的,你只需要linux系統,啥都不需要,vim gcc就可以開始愉快的開發了。啥ide都不需要。 hinayand 看你的需要,如果你想用VS用來開發 Windows絕對是你的菜 畢竟如果你不用M...