2014-10-05 78 views
4

在C語言中,當在屏幕上打印某些東西時,我們通常使用printf,puts等等。這些都是在其他頭文件中定義的。如何在不使用std lib函數的情況下打印某些內容?

有什麼辦法可以在屏幕上打印某些東西而不使用這些功能嗎?也就是說,printf如何實現?

+0

我更新我的answer.sorry以獲得錯誤答案。 – PersianGulf 2014-10-05 07:44:23

回答

2

打印到屏幕需要訪問幀緩衝(硬件)和用戶空間程序不允許直接訪問它。所以他們所做的是進行系統調用,內核爲他們執行所需的功能。 printf - >write系統調用 - >內核將數據寫入幀緩衝區,然後將控制權交還給用戶程序。 即使您不想使用printfputs(它們是在託管的libc中實現的),仍然必須使用寫入系統調用來告訴內核要在哪個設備上寫入緩衝區。

11

最終,C函數printf將直接或通過write(請參見man 2 write)導致系統調用sys_write。實際的實現取決於編譯器和標準庫。

0

library ncurses可以幫助你,但如果你想使用一個低級別的功能使用write(),如果你想要做的內核編程,你必須使用printk()

+0

這個問題與'bash'在C中實現的'bash'無關。我回滾了你所做的編輯(添加了bash標籤)。如果您的答案不適用,我們可以輕鬆地對其進行投票,但查找並更正您的不當編輯更加費力,所以請對您的編輯進行更謹慎和保守的處理。 – Anthon 2014-10-05 07:44:04

+0

謝謝@安東 – PersianGulf 2014-10-05 07:45:48

+0

http://linuxinme.blogspot.com/2007/04/debugging-kernel-with-printk.html – PersianGulf 2014-10-05 07:50:38

1

標準頭文件不一定是包含用C代碼編寫的函數的庫。
它們是C「interfase」的函數,但它很可能包含明確的機器代碼,在每種情況下都適用於目標系統。
標準頭文件通過這種方式提供了執行特殊處理的方法,這是在嚴格的C代碼中無法實現的。

printf()的具體情況中,情況更加清楚,因爲如果沒有標頭爲#include-d,那麼通過僅使用執行輸入/輸出操作的C語法沒有任何機制。

相關問題