{"id":811,"date":"2008-01-08T01:00:00","date_gmt":"2008-01-07T16:00:00","guid":{"rendered":"https:\/\/ecoop.net\/memo\/2008-01-08-1.html"},"modified":"2026-08-10T14:42:25","modified_gmt":"2026-08-10T05:42:25","slug":"2008-01-08-1","status":"publish","type":"post","link":"https:\/\/www.ecoop.net\/memo\/archives\/2008-01-08-1.html","title":{"rendered":"flock \u306e\u30e2\u30fc\u30c9\u5207\u66ff\u3048\u6642\u306e\u6319\u52d5\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308b"},"content":{"rendered":"<p>\nflock() \u3067\u30ed\u30c3\u30af\u7372\u5f97\u4e2d\u306b\u30ed\u30c3\u30af\u72b6\u614b\u3092\u5207\u308a\u66ff\u3048\u308b(LOCK_SH \u304b\u3089 LOCK_EX \u306b\u3059\u308b\u3001\u306a\u3069)\u3068\u3001\u74b0\u5883\u3084\u72b6\u6cc1\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u304c\u4fdd\u6301\u3055\u308c\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n&nbsp;<br \/>\n\u691c\u8a3c\u7528\u30b3\u30fc\u30c9:<br \/>\nA&#8230; \u30ed\u30c3\u30af\u5207\u308a\u66ff\u3048\u30d7\u30ed\u30bb\u30b9(keeper.php )<\/p>\n<blockquote><p>&lt;?php<br \/>\n$f=fopen(&#8220;t.txt&#8221;,&#8221;r+&#8221;);<br \/>\nfor($i = 0; $i < 10; $i++){ <br \/>\n&nbsp;&nbsp;\/\/ \u30ed\u30c3\u30af\u5207\u308a\u66ff\u3048\u307e\u305f\u306f\u53d6\u5f97(LOCK_EX -> LOCK_SH)<br \/>\n&nbsp;&nbsp;echo &#8220;shared($i)\\n&#8221;;<br \/>\n&nbsp;&nbsp;flock($f, LOCK_SH); <br \/>\n&nbsp;&nbsp;sleep(3);<br \/>\n&nbsp;&nbsp;\/\/ \u30ed\u30c3\u30af\u5207\u308a\u66ff\u3048(LOCK_SH -> LOCK_EX)<br \/>\n&nbsp;&nbsp;echo &#8220;exclusive($i)\\n&#8221;; <br \/>\n&nbsp;&nbsp;flock($f, LOCK_EX);sleep(3);  <br \/>\n}<br \/>\necho &#8220;Done! the treasure was protected!\\n&#8221;; \/\/ \u3053\u3053\u307e\u3067 theif.php \u306b\u30ed\u30c3\u30af\u304c\u3068\u3089\u308c\u306a\u3051\u308c\u3070\u671f\u5f85\u901a\u308a\u3002<br \/>\n?&gt;\n<\/p><\/blockquote>\n<p>B&#8230;\u30ed\u30c3\u30af\u596a\u53d6\u30d7\u30ed\u30bb\u30b9(thief.php)  \n<\/p>\n<blockquote><p>&lt;?php<br \/>\n$f=fopen(&#8220;t.txt&#8221;, &#8220;r+&#8221;); <br \/>\nflock($f, LOCK_EX); \/\/ \u30ed\u30c3\u30af\u5f85\u3061<br \/>\n\/\/ \u30ed\u30c3\u30af\u596a\u53d6\u6210\u529f<br \/>\necho &#8220;lock obtained!\\n&#8221;; <br \/>\necho &#8220;im doing something, hehehe.&#8221;;<br \/>\nfor($i=0;$i&lt;10;$i++){<br \/>\n&nbsp;&nbsp;sleep(1);<br \/>\n&nbsp;&nbsp;echo &#8220;.&#8221;;<br \/>\n} <br \/>\necho &#8220;\\nfinished! bye ;P\\n&#8221;;&#8217;<br \/>\nfclose($f); \/\/ \u30ed\u30c3\u30af\u958b\u653e<br \/>\n?&gt;\n<\/p><\/blockquote>\n<p>\u5b9f\u884c:\n<\/p>\n<blockquote><p>$ touch t.txt<br \/>\n$ nice php locker.php &amp;<br \/>\n$ php thief.php\n<\/p><\/blockquote>\n<p>\u7d50\u679c:<br \/>\nWindows XP SP2 + Cygwin + PHP 5.1.2 (FS: NTFS) &#8230; \u30ed\u30c3\u30af\u4fdd\u6301\u3055\u308c\u306a\u3044(thief won)<br \/>\nLinux 2.4.21-50.ELsmp + PHP 4.4.6 (FS: ext3) &#8230; \u30ed\u30c3\u30af\u4fdd\u6301\u3055\u308c\u308b(keeper won)<br \/>\nFreeBSD 6.2 + PHP 5.2.5 (FS: ufs) &#8230; \u30ed\u30c3\u30af\u4fdd\u6301\u3055\u308c\u308b(keeper won)<br \/>\n&nbsp;<br \/>\nWindows XP (FS: NTFS) \u306f\u30ed\u30c3\u30af\u81ea\u4f53\u306f\u3067\u304d\u307e\u3059\u304c\u3001LOCK_EX <-> LOCK_SH \u306e\u5207\u308a\u66ff\u3048\u3067\u3044\u3063\u305f\u3093\u30ed\u30c3\u30af\u304c\u89e3\u9664\u3055\u308c\u308b\u3068\u3044\u3046\u6319\u52d5\u306b\u306a\u308a\u307e\u3057\u305f\u3002<br \/>\n&nbsp;<br \/>\n\u306a\u304a\u3001PHP \u30de\u30cb\u30e5\u30a2\u30eb\u306e flock() \u306e\u9805\u306b\u3082\u3042\u308b\u3068\u304a\u308a\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304c FAT \u306e\u5834\u5408\u306a\u3069\u540c\u3058 Windows \u3067\u3082\u74b0\u5883\u306b\u3088\u3063\u3066\u306f\u7d50\u679c\u304c\u5909\u308f\u308b\u305f\u3081\u3001\u3053\u306e\u7d50\u679c\u3092\u9d5c\u5451\u307f\u306b\u305b\u305a\u5fc5\u305a\u3054\u81ea\u8eab\u306e\u74b0\u5883\u3067\u30c6\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<hr \/>\n<p>\n\u8ffd\u8a18(2008-01-09):<br \/>\n\u3061\u306a\u307f\u306b\u3001PHP 5.2.5 \u3067\u30bd\u30fc\u30b9\u3092\u305f\u3069\u3063\u3066\u307f\u305f\u3068\u3053\u308d PHP \u306e flock() \u306f ext\/standard\/flock_compat.c \u3067 flock (2) \u3067\u306f\u306a\u304f fcntl (2) \u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002Linux \u3084 BSD \u306a\u3069 fcntl \u3067\u30ed\u30c3\u30af\u5909\u63db\u304c\u30a2\u30c8\u30df\u30c3\u30af\u306b\u3067\u304d\u308b\u5834\u5408\u306f\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u305d\u3046\u3067\u3059\u3002<br \/>\n\u306a\u304a Windows \u3067\u3001\u304b\u3064 fcntl \u304c\u306a\u3044(Cygwin \u306a\u3069 UNIX \u64ec\u4f3c\u74b0\u5883\u30d3\u30eb\u30c9\u3067\u306f\u306a\u3044)\u5834\u5408\u306f\u3001 UNIX \u3068\u4e92\u63db\u6027\u304c\u3042\u308b\u3088\u3046\u306b <a href=\"http:\/\/msdn.microsoft.com\/library\/ja\/jpfileio\/html\/_win32_lockfileex.asp?frame=true\">LockFileEx()<\/a> \u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>flock() \u3067\u30ed\u30c3\u30af\u7372\u5f97\u4e2d\u306b\u30ed\u30c3\u30af\u72b6\u614b\u3092\u5207\u308a\u66ff\u3048\u308b(LOCK_SH \u304b\u3089 LOCK_EX \u306b\u3059\u308b\u3001\u306a\u3069)\u3068\u3001\u74b0\u5883\u3084\u72b6\u6cc1\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u304c\u4fdd\u6301\u3055\u308c\u306a\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002 &nbsp; \u691c\u8a3c\u7528\u30b3\u30fc\u30c9: A&#8230; \u30ed\u30c3 &hellip; <a href=\"https:\/\/www.ecoop.net\/memo\/archives\/2008-01-08-1.html\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">flock \u306e\u30e2\u30fc\u30c9\u5207\u66ff\u3048\u6642\u306e\u6319\u52d5\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308b<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[141],"tags":[32],"class_list":["post-811","post","type-post","status-publish","format-standard","hentry","category-lifehack","tag-php"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/posts\/811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/comments?post=811"}],"version-history":[{"count":2,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/posts\/811\/revisions"}],"predecessor-version":[{"id":1722,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/posts\/811\/revisions\/1722"}],"wp:attachment":[{"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/media?parent=811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/categories?post=811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ecoop.net\/memo\/wp-json\/wp\/v2\/tags?post=811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}