【Bash】Windows Subsystem for Linux【WSL】3
レス数が1000を超えています。これ以上書き込みはできません。
WSLのファイルシステムかメタデータ周りの問題かもな。
WSLなんて所詮オマケみたいなもんだ。遊びでしか使えん。 >>986
えとさ、安全かどうかでちゃんと考えてる?
読み取りで開いているって言ってるけど、
読み取り専用じゃねーからな。読み込み共有モードだからな
私は読み取りしかしない!と宣言してファイルを開いた時
その他のプロセスが書き込みしたら、一回目に読み取ったときと
二回目に読み取ったときでデータが変わってしまう
FILE_SHARE_READっていうのは自分が読み込みしかしない!と
宣言することじゃない。自分は書き込まないから他の人が読み込んでも
いつだって同じデータが読み取れるよ。
他の人は書き換えないと宣言するなら、読み取ってOKって言ってることになる。
同様にFILE_SHARE_WRITEは、自分はうまいことやるから
他の人書き込んでもOK!っていうことだ。
つまりは、自分は読み込みしかしないが他人に書き換えられたら困る!
ってときはFILE_SHARE_READだけにするんだよ
たいていは読み込み途中に書き換えられたら困るだろう?
mecabは他人に書き換えられてもOKと言ってるのか? 自分は読み取りしかしない!と宣言していても、
他人に書き換えられても大丈夫ってことにはならないからな Bzでの再現手順教えてくださいな
wsl上のemacsでc:/wsl/test.txtを開いたまま
win上のBz162でc:/wsl/test.txt開いてみたけど
問題なく開けるのでどうすればいいのかわからない >>988
書き込み側、読み込み側、どちらかが優先されるべきかは
それはアプリ次第であって、こうすべきと決めつけるものでもないでしょう。
起動中の読み取りアプリを犠牲にしてでも書き込み優先するという割り切り方もある。
>>990
後学のためにmecabをインストールしてみては? >>991
mecabでの再現の手順教えてもらえますか?
それよりはBzのほうが簡単だと思ったので、Bzで訪ねたんですけど >>992
以下のプログラムをWSLでコンパイルし、第一引数に開きたいファイルパスを渡して実行してください。
次に、Windows側で同じファイルをBzで開こうとすれば再現します。なお、当方は64bit版Windows10。
使っているWSLはUbuntu 18.04.1 LTS
#include <cstdio>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
int main(int argc, char* argv[])
{
const char* filename = argv[1];
int fd = ::open(filename, O_RDONLY);
int prot = PROT_READ;
char *p = reinterpret_cast<char *>(::mmap(0, 1024, prot, MAP_SHARED, fd, 0));
printf("%s %d %p\n", filename, fd, p);
fputs("input [ENTER].\n", stdout);
fgetc(stdin);
::close(fd);
fputs("bye.", stdout);
return 0;
} >>993
ありがと
wsl内部でファイルをreadonlyで開いても、windows側からはSHARE_RWで開いたとみなされて
SHARE_Rだけのcreatefileだとコケるという話ですね
fall 2018 updateでwslfsへ変換した環境でも再現できた >>988
> えとさ、安全かどうかでちゃんと考えてる?
たかが読み取りオンリーなプログラムの分際で、自分の安全しか考えない身勝手なプログラムはダメでしょう。
読み取り側が排他ロックしたい時だけロックするべきで、それ以外の時は書き込み側を優先するのが基本でしょう。 スキルの低い人ほど宗教的な信条を他人に押し付けたがる法則 スキルの低さを宗教的な信条で補っているともいえる。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 157日 12時間 21分 7秒 レス数が1000を超えています。これ以上書き込みはできません。