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