Я не совсем уверен, что вы будете делать с результатами текущего рабочего каталога , когда каталог будет продолжать существовать только до тех пор, пока он остается открытым -Вы не можете создавать новые файлы в каталоге, и он должен быть пустым, чтобы его можно было удалить - но вы можете использовать readlink(2)
на /proc/self/cwd
, чтобы найти имя:
$ 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>
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
:
#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;
}
мю слишком короткий правильно с егосовет chdir("/");
, если это демон - я могу себе представить, что у вашей программы есть веская причина, чтобы иначе узнать ее текущий рабочий каталог, и даже иметь представление о том, каким мог бы быть путь, если он еще существует- но в общем, вам все равно.Путь "."
будет работать практически во всех случаях, когда имеет смысл использовать текущий рабочий каталог, пока вам не понадобится встроенная оболочка pwd
для пользователя.