在C語言中,當在屏幕上打印某些東西時,我們通常使用printf
,puts
等等。這些都是在其他頭文件中定義的。如何在不使用std lib函數的情況下打印某些內容?
有什麼辦法可以在屏幕上打印某些東西而不使用這些功能嗎?也就是說,printf
如何實現?
在C語言中,當在屏幕上打印某些東西時,我們通常使用printf
,puts
等等。這些都是在其他頭文件中定義的。如何在不使用std lib函數的情況下打印某些內容?
有什麼辦法可以在屏幕上打印某些東西而不使用這些功能嗎?也就是說,printf
如何實現?
打印到屏幕需要訪問幀緩衝(硬件)和用戶空間程序不允許直接訪問它。所以他們所做的是進行系統調用,內核爲他們執行所需的功能。 printf
- >write
系統調用 - >內核將數據寫入幀緩衝區,然後將控制權交還給用戶程序。 即使您不想使用printf
或puts
(它們是在託管的libc中實現的),仍然必須使用寫入系統調用來告訴內核要在哪個設備上寫入緩衝區。
最終,C函數printf
將直接或通過write
(請參見man 2 write
)導致系統調用sys_write
。實際的實現取決於編譯器和標準庫。
library ncurses
可以幫助你,但如果你想使用一個低級別的功能使用write()
,如果你想要做的內核編程,你必須使用printk()
這個問題與'bash'在C中實現的'bash'無關。我回滾了你所做的編輯(添加了bash標籤)。如果您的答案不適用,我們可以輕鬆地對其進行投票,但查找並更正您的不當編輯更加費力,所以請對您的編輯進行更謹慎和保守的處理。 – Anthon 2014-10-05 07:44:04
謝謝@安東 – PersianGulf 2014-10-05 07:45:48
http://linuxinme.blogspot.com/2007/04/debugging-kernel-with-printk.html – PersianGulf 2014-10-05 07:50:38
標準頭文件不一定是包含用C代碼編寫的函數的庫。
它們是C「interfase」的函數,但它很可能包含明確的機器代碼,在每種情況下都適用於目標系統。
標準頭文件通過這種方式提供了執行特殊處理的方法,這是在嚴格的C代碼中無法實現的。
在printf()
的具體情況中,情況更加清楚,因爲如果沒有標頭爲#include-d
,那麼通過僅使用執行輸入/輸出操作的C語法沒有任何機制。
我更新我的answer.sorry以獲得錯誤答案。 – PersianGulf 2014-10-05 07:44:23