C言語,chdir()で、プロセスのカレントディレクトリを変更

スポンサーリンク

鍛錬 349

C言語,chdir()で、呼び出し元プロセスのカレントワーキングディレクトリを変更する

呼び出し元プロセスのカレントワーキングディレクトリを変更するには、chdir() を使用します。

関連記事:C言語,getcwd()で、プロセスのカレントディレクトリを取得
 
chdir() については、以下に示す通りです。

#include <unistd.h>

int chdir(const char *path);
 

 
chdir() は、呼び出し元プロセスのカレントワーキングディレクトリを、引数の path で指定したディレクトリに変更します。

成功すれば 0 を、エラーの場合は -1 を返します。

 
スポンサーリンク

プログラム

以下は、呼び出し元プロセスのカレントワーキングディレクトリを変更するプログラム、test_chdir.c です。

今回は、/var/tmp から /var/tmp/test1/test2/test3 へとカレントワーキングディレクトリを変更します。

// include
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// preprocessor
#define DEST_DIR "/var/tmp/test1/test2/test3"  // 変更先ディレクトリ

// prototype
int FuncGetCwd(char *cwd, size_t size);

// main
int main(void)
{
	char cwd[256] = "";
	int ret;
	
	// カレントワーキングディレクトリを取得(chdir()の実行前)
	ret = FuncGetCwd(cwd, sizeof(cwd) - 1);
	if (ret == -1) {
		printf("ERROR,FuncGetCwd() ret=%d\n", ret);
		exit(EXIT_FAILURE);
	}
	printf("cwd (before) = %s\n", cwd);
	
	// カレントワーキングディレクトリを変更
	ret = chdir(DEST_DIR);
	if (ret != 0) {
		printf("ERROR,chdir()\n");
		perror("chdir");
		exit(EXIT_FAILURE);
	}
	
	// カレントワーキングディレクトリを取得(chdir()の実行後)
	ret = FuncGetCwd(cwd, sizeof(cwd) - 1);
	if (ret == -1) {
		printf("ERROR,FuncGetCwd() ret=%d\n", ret);
		exit(EXIT_FAILURE);
	}
	printf("cwd (after)  = %s\n", cwd);
	
	return 0;
}

// =====================================================
// @brief      カレントワーキングディレクトリを取得する
// @param[out] cwd  カレントワーキングディレクトリ
// @return     0  -> 正常
// @return     -1 -> エラー
// @note       無し
// =====================================================
int FuncGetCwd(char *cwd, size_t size)
{
	char *p;
	
	p = getcwd(cwd, size);
	if (p == NULL) {
		perror("getcwd");
		
		return -1;
	}
	
	return 0;
}

実行結果

以下は、プログラム test_chdir.c を実行して、カレントワーキングディレクトリを /var/tmp から /var/tmp/test1/test2/test3 へと変更しています。

***@ubuntu:/var/tmp$ 
***@ubuntu:/var/tmp$ gcc -Wall -Wextra test_chdir.c -o test_chdir
***@ubuntu:/var/tmp$ ./test_chdir
cwd (before) = /var/tmp
cwd (after)  = /var/tmp/test1/test2/test3

 
上記に示した通り、カレントワーキングディレクトリを変更することができました。

スポンサーリンク

シェアする

フォローする