[英]Check for UNIX command line arguments, pipes and redirects from a C program
我有一些問題要弄清楚一旦我發現缺少命令行參數,我可以如何維護管道和重定向shell的功能。
例如,如果我使用scanf調用,那將使用重定向或來自shell的管道,但如果沒有這個,我會得到一個我不想要的提示。
我想通過argv [],管道或重定向接受命令行參數,但我無法弄清楚如何在得到提示時這樣做。 如果我例如嘗試這樣的事情:
if(argc < 2)
exit(0);
如果我嘗試這個程序,程序將終止:
echo arg | myProgram
或這個:
myProgram < fileWithArgument
我試圖查看這個,但我總是得到一些bash腳本參考。
處理這種情況的常用方法是檢查標准輸入流是否連接到終端,使用isatty或類似功能,具體取決於您的操作系統。 如果是,則從命令行獲取參數,如果沒有(它被重定向),則讀取標准輸入。
簡短版:你不能這樣做。
管道和重定向說明符不是程序的參數,而是它們是調用shell的命令,並且在程序的運行實例存在之前進行處理。 shell沒有將它們傳遞給argv
的程序或任何其他變量,並且您無法以任何可靠的方式發現它們。
尼爾為您提供了確定您是否連接到終端的方法 。
在您的示例中,您使用管道重定向,兩者都是echo arg | myProgram
echo arg | myProgram
和myProgram < filesWithArguments
正在將輸出發送到程序的STDIN 。
如果要讀取這些值,請在STDIN文件描述符上使用scanf
或fread
。
如果您嘗試將文件內容作為可執行文件的參數列表,則需要像下面這樣使用它:
# This will pass `lala` as a variable
myProgram `echo lala`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.