Linuxでacプログラムを書いています。execv() などのコマンドには、ac 文字列の形式のパスが必要です。現在のパスを ac スタイル文字列の形式で返すコマンドはありますか?
5 に答える
getcwd() :
あらすじ
#include <unistd.h> char *getcwd(char *buf, size_t size);
説明
getcwd()関数は、現在の作業ディレクトリの絶対パス名を buf が指す配列に配置し、bufを返します。配列にコピーされるパス名には、シンボリック リンクであるコンポーネントは含まれません。size引数は、buf引数が指す文字配列のバイト単位のサイズです。bufが NULL ポインターの場合、getcwd() の動作は規定されていません。
戻り値
正常に完了すると、getcwd()はbuf引数を返します。それ以外の場合、getcwd()はヌル ポインターを返し、エラーを示すためにerrnoを設定します。bufが指す配列の内容は未定義です....
execv() へのpath引数は、現在の作業ディレクトリ (getcwd() によって返される) またはシェル検索パス (getenv("PATH") によって返される) ではなく、実行したいアプリケーションへのパスです。 )。
何をしているかによっては、低レベルの exec() ファミリーよりも C ライブラリの system() 関数の方がより多くのマイレージを得ることができます。
これはANSI Cではありません:
#include <unistd.h>
char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);
パスを相対パスにできる場合は、「.」を使用できるはずです。またはパスとして「./」。うまくいくかどうかはわかりませんが、試してみてください。
私はプロのプログラマーではないので、これは正確な答えではありません。
あなたがする必要があるのは、環境変数PWD(現在の作業ディレクトリ)を取得することです
どのライブラリに含まれているかはわかりませんが、標準の Linux ヘッダーです。
探してみます。
編集:
システムコマンドも実行する必要があり、PATHにあるさまざまなbinパスが必要な場合に役立つgetenv()を考えていました