首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言標準輸入輸出重定向實戰

     編輯:關於C語言

C語言標準輸入輸出重定向實戰

C 程序的 scanf/printf 並不直接操作鍵盤/螢幕,而是讀寫 標準輸入 (stdin) 與 標準輸出 (stdout)。作業系統啟動程序時自動打開這兩個流,Shell 提供重定向操作符將其綁定到文件/管道/設備。

實戰任務:CSV 轉 JSON

程序 csv2json 從 stdin 讀取經緯度信息,向 stdout 輸出 JSON 陣列。

#include <stdio.h>
int main() {
    float lat, lon; char info[80]; int started = 0;
    puts("data[");
    while (scanf("%f,%f,%79[^\n]", &lat, &lon, info) == 3) {
        if (started) printf(",\n"); else started = 1;
        printf("{latitude:%f,longitude:%f,info:'%s'}", lat, lon, info);
    }
    puts("\n]");
    return 0;
}

數據文件 gpsdata.csv

42.123123,-71.321321,speed=21
41.123123,-71.421321,speed=11
43.123123,-71.621321,speed=18
44.123123,-71.321321,speed=17
45.123123,-71.321321,speed=21
42.523123,-70.321321,speed=20

重定向操作

# 編譯
gcc csv2json.c -o csv2json

# stdin 從文件讀取,stdout 寫入文件
./csv2json < gpsdata.csv > output.json

# output.json 內容:
# data[
# {latitude:42.123123,longitude:-71.321321,info:'speed=21'},
# {latitude:41.123123,longitude:-71.421321,info:'speed=11'},
# ...
# ]

重定向操作符速查

操作符含義影響流文件描述符
< file輸入重定向stdin0
> file輸出重定向(覆蓋)stdout1
>> file輸出重定向(追加)stdout1
2> file錯誤重定向stderr2
> file 2>&1合併 stdout 和 stderr 到 file1,21,2
&> file同上(Bash 簡寫)1,21,2

為什麼這很有用?

  • 測試自動化:準備好輸入文件與期望輸出文件,腳本跑測試對比輸出。
  • 管道組合:cat data.csv | ./csv2json | jq . 進一步處理。
  • 日誌分離:正常數據走 stdout,錯誤走 stderr,生產環境分別收集。
  • 無需修改代碼 即可改變輸入輸出來源,體現 Unix「一切皆文件」哲學。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved