Lisp Scheme Part28
■ このスレッドは過去ログ倉庫に格納されています
0051sage
2009/09/18(金) 19:48:14ファイルを他のプロセス対してロックしたいのだがうまくいかない。
処理系はsbcl ver 1.0.30 (os xで使用)
コードは以下の通り
;;defmacro! はlolのコードを拝借した
;;g!で始まるシンボルは(gensym)で生成したもの
(require :sb-posix)
(defmacro! with-locking-open-file ((s pathname &rest params) &body body)
`(with-open-file (,s ,pathname ,@params)
(let ((,g!flock (make-instance 'sb-posix:flock
:type sb-posix:f-wrlck
:whence sb-posix:seek-set
:start 0 :len 0)))
(sb-posix:fcntl ,s sb-posix:f-setlk ,g!flock) ;;lock file
(unwind-protect
,@body
(let ((,g!unflock (make-instance 'sb-posix:flock
:type sb-posix:f-unlck
:whence sb-posix:seek-set
:start 0 :len 0)))
(sb-posix:fcntl ,s sb-posix:f-setlk ,g!unflock))))))
(with-locking-open-file (f "test" :direction :output :if-exists :supersede)
(sleep 100))
;;ロックされなーい
■ このスレッドは過去ログ倉庫に格納されています