35

execv() のような C 言語関数を介して Linux コマンド「pwd」を実行したいと考えています。

問題は、「pwd」という実行可能ファイルがなく、「echo $PWD」を実行できないことです。これは、echo も実行可能ファイルが見つからない組み込みコマンドであるためです。

4

3 に答える 3

45

Cプログラムでシェルコマンドを実行したいだけなら、

   #include <stdlib.h>

   int system(const char *command);

あなたの場合、

system("pwd");

問題は、「pwd」という実行可能ファイルがなく、「echo $PWD」を実行できないことです。これは、echo も実行可能ファイルが見つからない組み込みコマンドであるためです。

これはどういう意味ですか?上記のパッケージは/bin/にあります。

sudo find / -executable -name pwd
sudo find / -executable -name echo
于 2013-10-06T14:05:15.683 に答える
22

実行する必要がsh -c echo $PWDあります。通常sh -c、シェル コマンドを実行します。

(実際、system(foo)は として定義されexecl("sh", "sh", "-c", foo, NULL)ているため、シェルのビルトインに対して機能します。)

ただし、の値だけが必要な場合はPWD、 を使用getenvしてください。

于 2013-10-06T13:03:56.600 に答える
11

execl() 関数を使用できます。

int execl(const char *path, const char *arg, ...);

ここに示すように:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/pwd", "pwd", NULL);

}

2 番目の引数は、プロセス テーブルに表示されるプロセスの名前です。

または、 getcwd() 関数を使用して現在の作業ディレクトリを取得できます。

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#define MAX 255

int main (void) {
char wd[MAX];
wd[MAX-1] = '\0';

if(getcwd(wd, MAX-1) == NULL) {
  printf ("Can not get current working directory\n");
}
else {
  printf("%s\n", wd);
}
  return 0;
}
于 2013-10-06T13:29:36.667 に答える