私は、ディレクトリだけであれば、オープン保持されているとして存在し続けるときに現在の作業ディレクトリの結果とを何をするか全くわからない - あなたは新しいファイルを作成することはできません。ディレクトリで、それはそれは削除することができるように空でなければならなかった - しかし、あなたは名前を発見する/proc/self/cwd
にreadlink(2)
を使用することができます。
$ mkdir syedsma
$ cd syedsma/
$ /tmp/proccwd
/proc/self/cwd reports: /tmp/syedsma
$ /tmp/getcwd
getcwd: /tmp/syedsma
$ rmdir ../syedsma/
$ /tmp/getcwd
getcwd failed: No such file or directory
$ /tmp/proccwd
/proc/self/cwd reports: /tmp/syedsma (deleted)
$
は、ここに私のgetcwd.c
です:
- 私はあなたがそうでなければ、現在のを知るためにあなたのプログラムのための十分な理由があるかもしれないと想像することができます
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
int main(int argc, char* argv[]) {
char buf[PATH_MAX];
ssize_t r = readlink("/proc/self/cwd", buf, sizeof(buf));
if (r < 0) {
perror("readlink /proc/self/cwd failed");
return 1;
} else {
buf[PATH_MAX-1] = '\0';
printf("/proc/self/cwd reports: %s\n", buf);
}
return 0;
}
mu is too shortは、それがデーモンである場合chdir("/");
に彼の助言で正しいです:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
char p[1000];
char *r;
r = getcwd(p, sizeof(p));
if (!r)
perror("getcwd failed");
else
printf("getcwd: %s\n", p);
return 0;
}
そして、ここでは私のproccwd.c
ですまだ存在していればどのようなパス名になっていたのかを知ることさえできますが、一般的には気にしないでください。パス名"."
は、ユーザのためにpwd
シェルを実装する必要があるまで、現在の作業ディレクトリが必要なすべてのケースで機能します。
ディレクトリが削除されても何が戻ってくると思いますか?もしあなたがデーモンとして何かを実行しているのであれば、ほとんどすぐに 'chdir("/");するべきです。 –
アプリケーションはtempディレクトリを作成してデプロイされますが、appln startを実行すると一時フォルダが削除されますので、getcwd呼び出しが失敗します。プロセスのローカルディレクトリを知る必要があります。 [Linuxシステム用] – Syedsma