簡體   English   中英

ls 命令在用 C(shell 腳本)編寫的程序中不起作用

[英]ls command does not work in the Program written in C(shell script)

void main() {
    char *args[MAX_LINE];
    char arg1[MAX_LINE/2] = "\0";
    char arg2[MAX_LINE/2] = "\0";
    printf("ubos>");
    fflush(stdout);
    fgets(arg1, sizeof(arg1), stdin);
    arg1[strlen(arg1) - 1] = '\0';
    fgets(arg2, sizeof(arg2), stdin);
    arg2[strlen(arg2) - 1] = '\0';

  abc:  
    printf("You typed: %s %s\n", arg1, arg2);
    fflush(stdin);
    args[0] = arg1;
    args[1] = arg2;
    args[2] = '\0'; 

    int i = 0;
    for (i = 0; i < MAX; i++) {
        printf("Vlue of arg[%d] =%s\n", i, args[i]);
    }

    if (strcmp(args[0], "ls") == 0) {
        execvp(args[0], args);
        goto abc;
    } else
    if (strcmp(args[0], "ps") == 0) {

    }

    printf("Something is not correct...\n");
    exit(0);
}

當我使用ls命令運行此代碼時,結果就是這樣。 我不知道這段代碼有什么問題。 當我運行此代碼以執行另一個.c文件時,它會完美執行,但是當我嘗試使用lsps命令時,它不允許我使用它並引發錯誤。

我還有一個問題,為什么這個goto在這個程序中不起作用。

ubos>ls

You typed: ls 
Vlue of arg[0] =ls
Vlue of arg[1] =
Vlue of arg[2] =(null)
ls: cannot access : No such file or directory

所以這是我的錯誤,你能給我一些關於如何使用exec命令及其不同類型的建議嗎?

如果他們不提供參數,請將args該參數設置為0 然后ls不會接收空字符串作為它的第一個參數,它根本不會得到任何參數。

args[0] = arg1;
if (strlen(arg2) == 0) {
    args[1] = 0;
} else {
    args[1] = arg2;
    args[2] = 0;
}

您還需要在打印所有參數的循環中檢查這一點。

for(i=0;i<MAX && arg[i];i++)
{
    printf("Value of arg[%d] =%s\n",i, args[i]);
}
if (strlen(arg2) == '\0')
    {
         args[0] = arg1;
         args[1] = '\0';
    } 
    else 
    {
        args[0] = arg1;
            args[1] = arg2;
            args[2] = 0;
    }
for(i=0;i<MAX && args[i];i++)
    {
            printf("Vlue of args[%d] =%s\n",i, args[i]);
    }

我將空格作為第二個參數傳遞。 所以它向我展示了錯誤。 上面的代碼是我的問題的解決方案..

暫無
暫無

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

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