スポンサーリンク

最近、めっきりFreeBSDでC言語を書かなくなった。たまたま、書く機会があったので、せっかくだから日記に書いてみる。
超いまさら感があるgetcwd()について。

C言語でカレントディレクトリ名を取得するときには、getcwd
を使う。getcwdcwdは、current working
directory
のこと。つまるところ、getcwdはカレントワーキングディレクトリを取得(get)するという意味。

使い方によっては、freeが必要になるので、注意が必要だ。

getcwd.c

getcwdのサンプルコード

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

#include <unistd.h>
#include <sys/param.h>

char *
Getcwd (char *buf, size_t size) {
	char *p = getcwd (buf, size);
	if (! p) {
		perror ("getcwd");
	}
	return (p);
}

int main(int argc, char *argv[])
{

	char	path[MAXPATHLEN];

	if (Getcwd (path, sizeof (path) ) == NULL) {
		exit (EXIT_FAILURE);
	}

	(void) puts (path);

	exit (EXIT_SUCCESS);
}

コンパイル方法

gcc -Wall getcwd.c


getcwd_null.c

getcwdには、NULLポインタを渡してもよい。
getcwdの中で PATH_MAX分のメモリを確保(malloc)してくれる。
その代わり、自分でメモリをfree(解放)する必要がある。

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

#include <unistd.h>
#include <sys/param.h>

char *
Getcwd (char *buf, size_t size) {
	char *p = getcwd (buf, size);
	if (! p) {
		perror ("getcwd");
	}
	return (p);
}

int main(int argc, char *argv[])
{

	char	*p;
	p = Getcwd (NULL, 0);

	if (p == NULL) {
		exit (EXIT_FAILURE);
	}

	(void) puts (p);
	free (p);

	exit (EXIT_SUCCESS);
}

コンパイル方法

gcc -Wall getcwd_null.c


getwd

getwd()という関数があるが、これは、 getcwdのバッファを MAXPATHLEN
として呼び出したのと同じ意味になる。

p = getcwd(buf, MAXPATHLEN);


/usr/src/lib/libc/gen/getcwd.c

getcwdのソース /usr/src/lib/libc/gen/getcwd.c をぼんやり見ていたら、
mallocの引数のところで、代入なんかしてて、たいしたことは全然ないんだけど、面白かった。

if ((pt = malloc(ptsize = PATH_MAX)) == NULL)
	return (NULL);
ept = pt + ptsize;

参考

FreeBSDドキュメント jman getcwd

2007/12/09追記

getcwdをgetpwdとタイポしていたところを修正しました。

C言語関連記事
[2008-05-03-1] FreeBSD C言語 kqueue/keventで簡易tail -fコマンドを作る
[2008-04-06-2] Unix C言語で超簡単なlsコマンドを作ってみる
[2007-12-27-2] C言語でCSVの文字列をsscanfで読み込む方法
[2007-12-22-1] FreeBSD C言語のerrnoの実装
[2007-09-23-3] C言語の_Boool型とC99とgccとstdbool.hのbool型
[2007-07-17-1] C言語による間違えトップ10
[2007-07-16-1] C言語使いのJavaScript strstr
[2007-07-02-4] Part1 オープンソース/C言語に学ぶ「ソースコードの読み方」
参照しているページ (サイト内): [2007-12-27-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー