簡體   English   中英

如何通過外殼程序腳本將運行時參數傳遞給C中的函數

[英]How to pass run time arguments to a function in c through a shell script

我有一個Shell腳本,該腳本必須從命令行獲取參數並將其傳遞給C語言中的函數。我嘗試搜索但找不到可理解的解決方案。 請幫我。 是否應該在外殼程序腳本中通過選項將參數作為命令傳遞?

我有一個像這樣的主要功能:

int main(int argc, char *argv[])
{
    if(argc>1)
    {
        if(!strcmp(argv[1], "ABC"))
        {



        }
        else if(!strcmp(argv[1], "XYZ"))   
        {

        }
    }
}

如何通過外殼程序腳本從命令行傳遞參數ABC / XYZ,外殼程序腳本隨后使用makefile編譯代碼?

您不能用==來有意義地比較字符串,這是指針相等性測試。 您可以將strcmp用作argc>1 && !strcmp(argv[1], "XYZ") main的參數具有某些屬性,請參見此處

順便說一句, mainargc至少為1。因此,測試argc==0 永遠不會成立。 通常argv[0]是程序名稱。

但是,如果您使用GNU glibc (例如在Linux上),它提供了幾種解析程序參數的方法

關於程序參數有約定和習慣 ,您最好遵循它們。 POSIX指定getopt(3) ,但是在GNU系統上, getopt_long更加方便。

另外要注意, 通配符是由做類Unix系統。 參見glob(7)

(在Windows上,情況有所不同,某些啟動例程àla crt0可能會解析命令行)

在實踐中,您最好使用一些系統函數來解析程序參數。 一些庫為此提供了一種方法,例如GTK具有gtk_init_with_args 否則,如果有,請使用getopt_long ...

作為啟發,還請看一些免費軟件程序的源代碼。 您可以在github或其他地方找到許多此類文件。

如何通過外殼程序腳本從命令行傳遞參數ABC / XYZ

如果將C ++程序編譯為可執行文件 ,例如/some/path/to/yourexecutable ,則只需運行類似以下的命令

 /some/path/to/yourexecutable ABC

如果PATH變量中的目錄/some/path/to/包含yourexecutable ,則只需運行yourexecutable ABC 如何設置PATH變量(您可以在Unix shell中使用echo $PATH進行查詢)是一個不同的問題(您可以使用源代碼編輯器(例如GNU emacs編輯一些shell 啟動文件,也許是$HOME/.bashrc 。 , vimgedit等...;您可以運行一些帶有適當的,以冒號分隔的目錄順序的export PATH= ....命令)。

哪個依次使用makefile來編譯代碼?

然后,您應該查看該Makefile ,您將知道什么是可執行文件。


您正在使用Linux並在Linux上進行編碼,因此,您應該閱讀有關Linux編程的知識(例如ALP或更新的知識;另請參見intro(2)syscalls(2) ...),並且需要了解有關操作系統的更多信息(因此請閱讀《 操作系統:三篇簡單的文章》

請參閱以下簡單示例:

$ cat foo.c
#include <stdio.h>

int main(int argc, char ** argv)
{
    int i;

    for (i = 0; i < argc; ++i) {
        printf("[%d] %s\n", i, argv[i]);
    }

    return 0;
}
$ gcc foo.c
$ ./a.out foo bar
[0] ./a.out
[1] foo
[2] bar
$

暫無
暫無

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

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