Bug #3198
closed
O_APPEND for redirect fd is ignored on windows
Added by wanabe (_ wanabe) over 14 years ago.
Updated about 13 years ago.
Description
=begin
Windows7 で、リダイレクト用にファイルをオープンする時
O_APPEND を渡しても無視されます。
$ cat test.rb
fname = "tmp.out"
File.delete fname if File.exist? fname
5.times do
system("echo a", STDOUT=>[fname, File::WRONLY|File::CREAT|File::APPEND, 0644])
end
p IO.read(fname)
$ ruby -v test.rb
ruby 1.9.2dev (2010-04-24 trunk 22784) [i386-mingw32]
"a\n"
以下のようなパッチを書きました。特に反対がなければコミットさせて頂きます。
rb_w32_open で処理することも考えましたが、おそらくリダイレクト以外では
O_APPEND が効くのではないかと思うので、とりあえず process.c で処理しました。
Index: process.c¶
--- process.c (revision 27483)
+++ process.c (working copy)
@@ -2094,6 +2094,11 @@ run_exec_open(VALUE ary, VALUE save, char *errmsg, size_t errmsg_buflen)
ERRMSG("open");
return -1;
}
+#if defined(_WIN32)
- if (flags & O_APPEND) {
-
lseek(fd2, 0, SEEK_END);
- }
+#endif
while (i < RARRAY_LEN(ary) &&
(elt = RARRAY_PTR(ary)[i], RARRAY_PTR(elt)[1] == param)) {
fd = FIX2INT(RARRAY_PTR(elt)[0]);
=end
=begin
Bug #3198: O_APPEND for redirect fd is ignored on windows
http://redmine.ruby-lang.org/issues/show/3198
起票者: _ wanabe
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.9.2dev (2010-04-24 trunk 22784) [i386-mingw32]
Windows7 で、リダイレクト用にファイルをオープンする時
O_APPEND を渡しても無視されます。
根本原因はなんなのでしょうか?
+#if defined(_WIN32)
-
if (flags & O_APPEND) {
-
lseek(fd2, 0, SEEK_END);
-
}
+#endif
レビューしました。lseek(SEEK_END)だと他のプロセスと競合した場合に
同じ事が起きますが、これは問題ない?
=end
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:41055] Re: [Bug #3198] O_APPEND for redirect fd is ignored on windows"
on Apr.25,2010 13:20:15, kosaki.motohiro@gmail.com wrote:
Windows7 で、リダイレクト用にファイルをオープンする時
O_APPEND を渡しても無視されます。
根本原因はなんなのでしょうか?
fdに付随したフラグは子プロセスに受け継がれません。
だってファイルデスクリプタなんて概念Windows自体にはないんだも
ん。
+#if defined(_WIN32)
-
if (flags & O_APPEND) {
-
lseek(fd2, 0, SEEK_END);
-
}
+#endif
レビューしました。lseek(SEEK_END)だと他のプロセスと競合した場合に
同じ事が起きますが、これは問題ない?
避け得ないからいいんじゃないですかね。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:41055] Re: [Bug #3198] O_APPEND for redirect fd is ignored on windows"
on Apr.25,2010 13:20:15, kosaki.motohiro@gmail.com wrote:
Windows7 で、リダイレクト用にファイルをオープンする時
O_APPEND を渡しても無視されます。
根本原因はなんなのでしょうか?
fdに付随したフラグは子プロセスに受け継がれません。
だってファイルデスクリプタなんて概念Windows自体にはないんだも
ん。
ああ、なるほど。なっとく。すいません空気読めてませんでした
ならしょうがないですね。
=end
- Category set to core
- Target version set to 2.0.0
=begin
レビューおよび補足ありがとうございます。
その後、このパッチでは書き込み前に既にポインタが末尾に移動している状態になり
読み込み時に O_APPEND の動作と異なってしまいよくない、ということがわかりましたので
上のパッチは取り下げます。
また、1.9.2 前に早急に直すべきとも思えませんので判別のために
ターゲットを 1.9.x にしておきます。
=end
- Status changed from Open to Assigned
- Assignee set to arton (Akio Tajima)
- Status changed from Assigned to Rejected
- Assignee changed from arton (Akio Tajima) to usa (Usaku NAKAMURA)
なぜかartonさんに割り当てられてるけど勝手に分捕ります。
で、「仕様」ということで今回はreject。
なんか新しい解決策を誰かが思いついたらまた考えましょう。
子プロセスをsuspend状態で作ってremote thread注入して、というのが¶
今突然ひらめいたけどもちろんやらない。¶
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0