3

Linuxでacプログラムを書いています。execv() などのコマンドには、ac 文字列の形式のパスが必要です。現在のパスを ac スタイル文字列の形式で返すコマンドはありますか?

4

5 に答える 5

11

getcwd() :

あらすじ

#include <unistd.h>

char *getcwd(char *buf, size_t size);

説明

getcwd()関数は、現在の作業ディレクトリの絶対パス名を buf が指す配列に配置し、bufを返します。配列にコピーされるパス名には、シンボリック リンクであるコンポーネントは含まれません。size引数は、buf引数が指す文字配列のバイト単位のサイズです。bufが NULL ポインターの場合、getcwd() の動作は規定されていません。

戻り値

正常に完了すると、getcwd()はbuf引数を返します。それ以外の場合、getcwd()はヌル ポインターを返し、エラーを示すためにerrnoを設定します。bufが指す配列の内容は未定義です....

于 2008-09-05T23:25:49.330 に答える
6

execv() へのpath引数は、現在の作業ディレクトリ (getcwd() によって返される) またはシェル検索パス (getenv("PATH") によって返される) ではなく、実行したいアプリケーションへのパスです。 )。

何をしているかによっては、低レベルの exec() ファミリーよりも C ライブラリの system() 関数の方がより多くのマイレージを得ることができます。

于 2008-09-05T23:30:19.460 に答える
2

これはANSI Cではありません:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);
于 2008-09-05T23:27:51.930 に答える
0

パスを相対パスにできる場合は、「.」を使用できるはずです。またはパスとして「./」。うまくいくかどうかはわかりませんが、試してみてください。

于 2008-09-05T23:35:22.113 に答える
-2

私はプロのプログラマーではないので、これは正確な答えではありません。

あなたがする必要があるのは、環境変数PWD(現在の作業ディレクトリ)を取得することです

どのライブラリに含まれているかはわかりませんが、標準の Linux ヘッダーです。

探してみます。

編集:

システムコマンドも実行する必要があり、PATHにあるさまざまなbinパスが必要な場合に役立つgetenv()を考えていました

于 2008-09-05T23:27:33.460 に答える