3.解決方案
有些程序出現使用printf 無法列印資訊到串列埠
預設linux 設定了列印緩衝功能,當列印緩衝區未滿情況下,不列印。如果需要列印,增加fflush(stdout) 語句或者以\n結尾,用於重新整理緩衝區,即可列印。
在系統或者程序中,關閉了printf功能,將輸入輸出重定向到 /dev/null 中,所以printf的輸出,都輸出到/dev/null,自然無法列印資訊。通過以下命令檢視:
# ls -al /proc/pid/fd
dr-x------ 2 root root 0 apr 28 11:36 .
dr-xr-xr-x 7 root root 0 apr 28 11:00 ..
lrwx------ 1 root root 64 apr 28 11:36 0 -> /dev/null
lrwx------ 1 root root 64 apr 28 11:36 1 -> /dev/null
lrwx------ 1 root root 64 apr 28 11:36 2 -> /dev/null
從中可以看到 0、1、2 檔案都被指向 「dev/null」
shell 中執行的程序,缺省會有3個檔案描述符存在(0、1、2)
0–與程序的標準輸入相關聯。
1–與程序的標準輸出相關聯。
2–與程序的標準錯誤輸出相關聯。
0、1、2都被指向 /dev/null,所以 輸入、輸出、標準錯誤的資訊都指向null,往null 丟資料,自然什麼都沒有顯示。
重定向輸入、輸出、錯誤資訊。本裝置的輸出串列埠為 /dev/console,則進行設定的**實現重定向:
#include #include #include void set_redirect()
dup2(fd, 0); // standrad input set
dup2(fd, 1); // standrad ouput set
dup2(fd, 2); // standrad error set
close(fd);
}int main(int argc, char** ar**)
keil中串列埠重定向問題
重定向是指使用者可以自己重寫c語言的庫函式,當聯結器檢查到使用者編寫了與c語言庫函式相同名字的函式時,優先採用使用者編寫的函式,這樣就可以對庫函式進行修改了。若要printf 函式工作,需要把printf 函式重新定向到串列埠函式。為了實現重定向 printf 函式,需要重寫fputc 這個c標準庫...
STM32 HAL庫 printf 串列埠重定向
在對printf重定向之前,一定不要有printf,否則程式馬上跑飛。在main函式之前加上如下 對串列埠進行重定向,當然,串列埠一定要初始化之後再用printf,否則程式雖然不會飛,但是printf也不會有結果 ifdef gnuc define putchar prototype int io ...
Linux基礎 重定向
linux基礎 重定向。實驗環境說明 rhel7 虛擬機器 首先,記住 linux下一切皆檔案,linux系統中使用檔案來描述各種硬體,裝置資源等。在實際的linux維護中,可以改變輸入輸出內容的方向.輸入 鍵盤 滑鼠 輸出 顯示器 不使用預設的標準輸入輸出裝置,即重定向.檔案描述符是乙個簡單的整數...