[過去ログ] 【Bash】Windows Subsystem for Linux【WSL】3 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
986(1): 984 [] 2018/11/09(金) 13:51:52.09 ID:3WMswF4A(2/7) AAS
説明補足。Mecabは、オープンソース 形態素解析エンジン。
以下URLが公式。多分。
外部リンク:taku910.github.io
>>984984(1): login:Penguin [] 2018/11/09(金) 12:48:55.28 ID:3WMswF4A(1/7) AAS
-OyomiオプションつきでWSL版mecabで開いた状態だと、Windows版mecabで同じ辞書フォルダを開けない。
Windows側でCreateFile()の共有指定をFILE_SHARE_READからFILE_SHARE_READ | FILE_SHARE_WRITEに変更して再ビルドすることで回避できた。
同じ問題が、いろんなアプリで起きそうな予感。
WSLで読み取りで開いているファイルにアクセスできないWindowsアプリとか潜在的に多そう。
ちなみにMSのCライブラリだとfopen(filename, "r") でFILE_SHARE_READ | FILE_SHARE_WRITEが指定されるので大丈夫。
CreateFile()というWindows固有のWin32APIを直接呼び出すコードで問題が起きる可能性がある。
読み取りで開くからといって共有指定をILE_SHARE_READ | FILE_SHARE_WRITE ではなくFILE_SHARE_READだけにするとハマる。
で再ビルドしたってのはソースを修正してmecabバイナリ群をリビルトしたという意味。
CreateFile()を呼び出している箇所は一ヶ所だけなので修正はさほど手間ではない。
開発者の方には、そろそろMecabの最新版を公式リリースしてもらいたい。64bit対応とかあるだろうし。
なお、Mecabの最終更新が2013-02-18と5年以上前。
Mecabに限らず、WSLとWindowsで同時にファイルを開くアプリは要注意。
Bzという割とメジャーなバリナリエディタもCreateFile()の共有指定がFILE_SHARE_READだけなので同じ現象が起きる。
この件、WSLの仕様がおかしいようにも思える。
988(2): login:Penguin [sage] 2018/11/09(金) 14:14:02.13 ID:+MT3NdP/(1/2) AAS
>>986
えとさ、安全かどうかでちゃんと考えてる?
読み取りで開いているって言ってるけど、
読み取り専用じゃねーからな。読み込み共有モードだからな
私は読み取りしかしない!と宣言してファイルを開いた時
その他のプロセスが書き込みしたら、一回目に読み取ったときと
二回目に読み取ったときでデータが変わってしまう
FILE_SHARE_READっていうのは自分が読み込みしかしない!と
宣言することじゃない。自分は書き込まないから他の人が読み込んでも
いつだって同じデータが読み取れるよ。
他の人は書き換えないと宣言するなら、読み取ってOKって言ってることになる。
同様にFILE_SHARE_WRITEは、自分はうまいことやるから
他の人書き込んでもOK!っていうことだ。
つまりは、自分は読み込みしかしないが他人に書き換えられたら困る!
ってときはFILE_SHARE_READだけにするんだよ
たいていは読み込み途中に書き換えられたら困るだろう?
mecabは他人に書き換えられてもOKと言ってるのか?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.264s*