スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

最近、 flock(2) なコードを見て、久しぶりにファイルをロックしたくなったので、ファイルロックを行うプログラムを書いてみました。

ロックプログラミング

このプログラムは、スコープから外れるときに、ファイルデスクリプタのロックを解放してくれます。
#include <stdio.h>
#include <sys/file.h>
#include <err.h>
class LockFile
{
	int fd;
	int op;
public:
	LockFile (FILE *fp, int operation = LOCK_EX) : op(operation) {
		if (fp) {
			fd = fileno (fp);
			this->lock ();
		} else {
			fd = -1;
		}
	}
	LockFile (int filed, int operation = LOCK_EX) : fd(filed), op(operation) {
		this->lock ();
	}

	LockFile ( ) : fd(-1) { }

	~LockFile () {
		if (fd != -1)
		{
			flock (fd, LOCK_UN);
		}
	}

	int lock (int filed, int operation = LOCK_EX) {
		fd = filed;
		op = operation;
		return (this->lock () );
	}
	int lock ()
	{
		if (fd == -1) {
			warnx ("fd is -1");
			return (-1);
		}
		if (flock(fd, op)== -1)
		{
			perror ("can not lock file");
			fd = -1;
			return (-1);
		}
		return (0);
	}
};

こんなカンジで使います。 LockFile クラスは1つのファイルしかサポートしていません。
void func ()
{
	char *filename = "lock.txt";
	FILE *fp = fopen (filename, "r");
	if (fp == NULL) {
		err (1, "can not open %s", filename);
	}
	LockFile f(fp);

	// doit
	// ...
}

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


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

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
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入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー