簡體   English   中英

檢查來自C程序的UNIX命令行參數,管道和重定向

[英]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 | myProgrammyProgram < filesWithArguments正在將輸出發送到程序的STDIN

如果要讀取這些值,請在STDIN文件描述符上使用scanffread

如果您嘗試將文件內容作為可執行文件的參數列表,則需要像下面這樣使用它:

# This will pass `lala` as a variable
myProgram `echo lala`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM