execv() のような C 言語関数を介して Linux コマンド「pwd」を実行したいと考えています。
問題は、「pwd」という実行可能ファイルがなく、「echo $PWD」を実行できないことです。これは、echo も実行可能ファイルが見つからない組み込みコマンドであるためです。
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
実行する必要がsh -c echo $PWD
あります。通常sh -c
、シェル コマンドを実行します。
(実際、system(foo)
は として定義されexecl("sh", "sh", "-c", foo, NULL)
ているため、シェルのビルトインに対して機能します。)
ただし、の値だけが必要な場合はPWD
、 を使用getenv
してください。
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;
}