C言語,link()関数でファイルのハードリンクを作成する

スポンサーリンク

鍛錬 776

C言語,link()関数でファイルのハードリンクを作成する

ファイルのハードリンクを作成するには、link()関数を使用します。
 
以下は、link()関数についてです。

#include <unistd.h>

int link(const char *oldpath, const char *newpath);
 

 
oldpath とは異なるファイルシステムにハードリンクを作成することはできません。

newpath が存在する場合は、上書きで作成されません。

引数

以下は、上記の引数についてです。

引数 意味
const char *oldpath リンク元のファイル
const char *newpath リンク先のファイル

戻り値

以下は、戻り値についてです。

戻り値
int 成功した場合 0
int エラーの場合 -1
スポンサーリンク

プログラム

以下は、ハードリンクを作成するプログラム、test_link.c です。

今回は、リンク元のファイルを「AAA.txt」、リンク先のファイルを「BBB.txt」としています。

リンク元のファイル
/var/tmp/test/AAA.txt
リンク先のファイル
/var/tmp/test/BBB.txt
// include
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

// main
int main(void)
{
	char src_path[256] = "";
	char dst_path[256] = "";
	int ret;
	
	// リンク元ファイルのパスを格納
	strncpy(src_path, "/var/tmp/test/AAA.txt", sizeof(src_path) - 1);
	
	// リンク先ファイルのパスを格納
	strncpy(dst_path, "/var/tmp/test/BBB.txt", sizeof(dst_path) - 1);
	
	// ハードリンクを作成
	ret = link(src_path, dst_path);
	if (ret == -1) {
		perror("link");
		exit(EXIT_FAILURE);
	}
	
	return 0;
}
スポンサーリンク

実行結果

以下は、プログラム test_link.c を実行しています。

***@ubuntu:~/any/test/c$ 
***@ubuntu:~/any/test/c$ ls -li /var/tmp/test
合計 4
917782 -rw-r--r-- 1 *** *** 6 Mar  8 04:06 AAA.txt
***@ubuntu:~/any/test/c$ 
***@ubuntu:~/any/test/c$ 
***@ubuntu:~/any/test/c$ gcc -Wall -Wextra test_link.c -o test_link
***@ubuntu:~/any/test/c$ ./test_link
***@ubuntu:~/any/test/c$ 
***@ubuntu:~/any/test/c$ 
***@ubuntu:~/any/test/c$ ls -li /var/tmp/test
合計 8
917782 -rw-r--r-- 2 *** *** 6 Mar  8 04:06 AAA.txt
917782 -rw-r--r-- 2 *** *** 6 Mar  8 04:06 BBB.txt

 
上記に示した通り、ハードリンクが作成されため、AAA.txt と BBB.txt のiノードが同じ「917782」となり、リンク数も互いに 2 となっていることが分かります。

タイトルとURLをコピーしました