簡體   English   中英

如何使用C程序中的選項運行'ls'?

[英]How can I run 'ls' with options from a C program?

我想在Linux機器上使用execv()執行命令ls -a ,如下所示:

char *const ptr={"/bin/sh","-c","ls","-a" ,NULL};
execv("/bin/sh",ptr);

但是,此命令不會列出隱藏文件。 我究竟做錯了什么?

我不確定你為什么要通過/bin/sh傳遞這個...但是因為你是,你需要將-c之后的所有參數作為單個值傳遞,因為這些現在由/bin/sh解釋。

這個例子是比較shell的語法

/bin/sh -c ls -a

/bin/sh -c 'ls -a'

第二個工作,但第一個沒有。

所以你的ptr應該定義為

char * const ptr[]={"/bin/sh","-c","ls -a" ,NULL}; 

如果你需要從程序中獲取目錄的內容,那么這不是最好的方法 - 你將有效地解析ls的輸出,這通常被認為是一個壞主意

相反,您可以使用libc函數opendir()readdir()來實現此目的。

這是一個小例子程序,它將迭代(並列出)當前目錄中的所有文件:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <dirent.h>

int main (int argc, char **argv) {
    DIR *dirp;
    struct dirent *dp;

    dirp = opendir(".");
    if (!dirp) {
        perror("opendir()");
        exit(1);
    }

    while ((dp = readdir(dirp))) {
        puts(dp->d_name);
    }

    if (errno) {
        perror("readdir()");
        exit(1);
    }

    return 0;
}

請注意,與默認的ls -a輸出不同,列表不會被排序。

暫無
暫無

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

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