○ファイルの排他制御

ファイルの操作

Linuxのでのファイルの排他制御
ファイルの排他制御はOSの機能ですので、このプログラムはWindowsでは動きません
Windowsでは、WindowsのAPIを使用する必要があります

■二つのプロセスから一つのファイルを排他ロックをかけて開きます

#include <stdio.h>
#include <sys/file.h>

int main(int argc, char* argv[])
{
	char *str;
	if(fork()){//プロセスの複製
		str="A ";
	}else{
		str="B ";
	}

	while(1){
		FILE * fp;
		if((fp=fopen("test.txt","r"))==NULL){
			//エラー処理
			return 1;
		}else{
			flock(fileno(fp),LOCK_EX);//ファイルを排他ロックします ロックが出来るまでここで待ちます
			printf("%s%s\n",str,"lock");
			lseek(fileno(fp),0,SEEK_SET);//ファイルポインタのリセット ロックできる前にファイルが変わっている可能性があるため
			sleep(2);
			printf("%s%s\n",str,"unlock");
			flock(fileno(fp),LOCK_UN);//ロックの解除
			fclose(fp);
		}
		sleep(1);
	}
	return 0;
}


■実行結果

A lock
A unlock
B lock
B unlock
A lock
A unlock
B lock
B unlock
A lock
A unlock
B lock
B unlock
A lock
A unlock

▲排他制御が行われているため、lockとunlockの間には二つ目ののプロセスが入り込んでませんね



▲トップページ > Linux と C