[問題] linux下執行c的命令參數問題

作者: roger840410 (roger)   2019-10-16 09:30:44
初次本版發文有不妥的地方請指正
在linux下用gcc編譯./執行
作業要求把txt檔案的每行照字母排序後輸出新的txt
基本上寫完沒問題
但我卡在兩個地方
1.
命令行
./sort < old.txt > /tmp/new.txt
在sort.c中要怎麼引用這個old.txt?
我本來想用fopen取得argv的導入文件名但失敗
我寫個迴圈把argv[]裡面的東西印出來
但只有argv[0]是 ./sort 後面全是不相干的東西
把命令行的<>拿掉argv[1] argv[2]就正常=命令參數了(old.txt 和/tmp/new)
但作業要求不能動.sh檔案也就是不能改命令
而且亂打測試發現./sort < old.txt > abcdefg
會生成一個abcdefg檔案 內容是程式中printf結果(就不會顯示在terminal裡了)
請問命令行的文件名用尖括號刮起來有什麼特別意義嗎?
2.
用fopen生成單個 new.txt沒問題但加上資料夾路徑/tmp/new.txt就創不出來也不會報錯
請問是出了什麼問題或是有什麼關鍵字可以找嗎?
謝謝
作者: jerryh001   2019-10-16 09:33:00
不是<>而是<和>兩件事 <file表示stdin改成從file來 >file表示stdout改成從file出去
作者: Bencrie   2019-10-16 09:37:00
直接存取 stdin & stdout,這兩個 FILE 一開始就會先開好
作者: x246libra (楓)   2019-10-16 09:41:00
google "redirect 重導向 linux"
作者: Schottky (順風相送)   2019-10-16 09:46:00
stdin & stdout 就當作鍵盤輸入、螢幕輸出即可
作者: roger840410 (roger)   2019-10-16 09:50:00
真的非常感謝各位的指點 原來我一開始思考方向就錯了... 感覺在學校的linux白學了(掩面)
作者: Schottky (順風相送)   2019-10-16 12:07:00
你只是沒玩過 UVa 而已 (拍拍)
作者: Bencrie   2019-10-17 01:44:00
呃 ... Windows 也是一樣啊
作者: eye5002003 (下一夜)   2019-10-23 12:40:00
fopen可以建立檔案但是不會建立資料夾,你可以先用boost::filesystem先把資料夾建好

Links booklink

Contact Us: admin [ a t ] ucptt.com