Linux基礎入門 串列埠重定向

2021-10-03 06:45:53 字數 1202 閱讀 9942

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維護中,可以改變輸入輸出內容的方向.輸入 鍵盤 滑鼠 輸出 顯示器 不使用預設的標準輸入輸出裝置,即重定向.檔案描述符是乙個簡單的整數...