chdir() を呼び出して cwd を変更するプログラムがあります。ただし、プログラムが終了すると、cwd は chdir() の呼び出しで指定されたディレクトリにとどまらず、プログラムを呼び出したディレクトリに戻ります。chdir() が実際に指定されたディレクトリに変更されているかどうかをテストするプログラムを作成し、chdir() が私が推測したことを行っていることを発見しました: プログラムの実行中に指定されたディレクトリに変更してから、プログラムを実行したディレクトリに戻ります。
テストのコードは次のとおりです。
#include <stdio.h>
#include <unistd.h>
#define NAME_MAX 100
int main(int argc, char **argv)
{
char buf[NAME_MAX];
char *path = argv[1];
if (chdir(path) == -1) { /* change cwd to path */
fprintf(stderr, "error: could not change to dir %s\n", path);
return 1;
}
getcwd(buf, NAME_MAX);
printf("CWD is: %s\n", buf); /* print cwd as obtained from getcwd() */
return 0;
}
ここに私の端末からの出力があります:
john@ubuntu:~/C/cli$ pwd
/home/john/C/cli
john@ubuntu:~/C/cli$ mkdir foobar
john@ubuntu:~/C/cli$ ./test.c foobar
CWD is: /home/john/C/cli/foobar
john@ubuntu:~/C/cli$ pwd
/home/john/C/cli
私の質問は、プログラムが終了した後、chdir() の呼び出しで指定したディレクトリにどのように留まることができるかということです。また、私は Ubuntu 12.04 を使用しており、gcc でコンパイルしています。