[英]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};
如果你需要從c程序中獲取目錄的內容,那么這不是最好的方法 - 你將有效地解析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.