アカウント名:
パスワード:
そのディスクが FAT か NTFS で動作が変わる、とかいう仕様なんでは?
「ls -lR | cat」 より前に、「touch ソソソソソ」に失敗しました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
最近のCygwinの出来からいって (スコア:0)
どうしてもパフォーマンスを気にするような局面では実機に*BSDかLinux入れてしまうので。
Re:最近のCygwinの出来からいって (スコア:1)
パス中のSJIS文字の後置バイトに¥が含まれる場合にこけるという、cygwinのバグは直ったのかしらん?
直っているなら、SFUはあまり必要ではない、cygwinを使えば良いですね。だが、直っていないなら、Windows管理のパワーアップツールとしてはcygwinは不適当でしょう。
Re:最近のCygwinの出来からいって (スコア:0)
Cygwinの使い道を大きく逸れているとような気がしないでもないなぁ
逆に言えばCygwinで扱える機能は色んな意味でWindowsに依存しているために
Windowsの管理をUnix Likeな環境で行なう事はできるようになるけど
Unixと同等の機能や性能を付け加えるためのものじゃない。
つまりパワーアップなんてしな
Re:最近のCygwinの出来からいって (スコア:2, 参考になる)
使い方は人それぞれ、ですね。UNIXで動くサーバプログラムをWindowsでも使いたいという人もあれば、UNIXツールでWindowsの管理を楽にしたいと考える人もいる訳で。どれが正しい、どれが間違ってる、とは言えないかと。
> いつの時代の話ですか?
2003/02に調べた1.3.20にはそのバグがありました。mkisofsをWindowsで使おうとして、¥が後置バイトに含まれる文字があるファイルやディレクトリでエラーが出て。stat()とかの関数がこけるんですね。
で、今、1.5.5-1を入れて試したんですが、直っていない気がします。'ソソソソソ'の様な名前のファイルを作って、
ls -lR | cat
とでもしてみてください。
Re:最近のCygwinの出来からいって (スコア:0)
> ls -lR | cat
>とでもしてみてください。
うちの環境(1.3.22-1)では何も起きませんでした。
Re:最近のCygwinの出来からいって (スコア:2, 参考になる)
> うちの環境(1.3.22-1)では何も起きませんでした。
うーん、何ですかねえ?
cygwin1.dll中にある、ディレクトリのセパレータを識別するコードが何も考えずに¥を捜しているので、この問題が起きるのです。¥が後置バイトなのかどうかを見るコードを付け加えて、cygwin1.dllを再構築するとこの問題は直りますが、オリジナルの1.5.5-1にはそのコードがまだ入っていない様です。で、その1.3.22-1は、そんなパッチが当たっていないオリジナルなのですか?
ls -lR | cat は、ボクの所ではこんな感じ。
--------------------
$ ls -lR | cat
ls: ソソソソソ: Not a directory <---- これ
.:
total 9
-rwxrwxrwx 1 Administ なし 13336 Jan 14 16:18 a.exe
-rwxrwxrwx 1 Administ なし 677 Jan 14 16:18 fntest.c
drwxrwxrwx+ 2 Administ なし 0 Jan 14 15:04 あいうえ
./あいうえ:
total 0
-rwxrwxrwx 1 Administ なし 0 Jan 14 15:01 a.txt
-rwxrwxrwx 1 Administ なし 0 Jan 14 15:01 b.txt
--------------------
そして、ファイル'ソソソソソ'に対するstat()は、errnoが20の"Not a directory"でこけます。
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
int main(int ac,char *av[])
{
int rv;
DIR *dir;
struct dirent *dirp;
struct stat statbuf;
dir = opendir(".");
while((dirp = readdir(dir)) != NULL) {
printf("%s ",dirp->d_name);
rv = stat(dirp->d_name,&statbuf);
if(rv == -1) {
printf("stat() failed, errno:%d, %s \n",errno,strerror(errno));
}
else {
printf("size:%lld, atime:%ld, mtime:%ld, ctime:%ld\n"
,statbuf.st_size
,statbuf.st_atime,statbuf.st_mtime,statbuf.st_ctime);
}
}
return 0;
}
$ ./a
. size:4096, atime:1074065072, mtime:1074064805, ctime:1074059872
.. size:4096, atime:1074064811, mtime:1074059948, ctime:1046183079
a.exe size:13336, atime:1074065072, mtime:1074064716, ctime:1074063369
fntest.c size:677, atime:1074064792, mtime:1074064711, ctime:1074059959
あいうえ size:0, atime:1074064870, mtime:1074060249, ctime:1074060249
ソソソソソ stat() failed, errno:20, Not a directory <---- これ
$ uname -a
CYGWIN_NT-5.0 cassandro 1.5.5(0.94/3/2) 2003-09-20 16:31 i686 unknown unknown Cygwin
根拠レス (スコア:1)
# mishimaは本田透先生を熱烈に応援しています
Re:最近のCygwinの出来からいって (スコア:0)
NTFSもFAT32でも出ました。
ひょっとして、Cywin JE [sixnine.net]を使うと変わるとか?
Re:最近のCygwinの出来からいって (スコア:0)
$ uname -a
CYGWIN_NT-5.0 xxx 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 unknown unknown Cygwin
$ ls -lR|cat$ ls -lR|cat
ls: ソソソソソ: Not a directory
.:
total 195489
-rwx------+ 1 Administ なし 926 Jan 7 15:03 MyApplication.class
(以下略)
Re:根拠レス (スコア:1)
そんなはずは、と思いつつ、FATでフォーマットしたFD/HDDにファイルをコピーしてやってみましたが、結果は同じですね。"Not a directory"です。
その仕様がどこに書かれているのか、ご教示ください。
駄コメントですまん (スコア:1)
元コメントのタイトルのとおり、根拠レスなのであしからず。
Cygwin の情報は出ている(バージョンとか)ものの、
Windows 自体についての情報がなかったところが気になっただけ。
# mishimaは本田透先生を熱烈に応援しています
Re:最近のCygwinの出来からいって (スコア:0)
落ちるバグじゃなかったの?
Re:根拠レス (スコア:0)
Re:根拠レス (スコア:1)
うーん、うーん。確かに使用文字セットはNTFSがUNICODEでFATがSJISです(VFATのロングファイル名がUNICODEであるのは置いておきます)。ですが、このcygwinの問題とは関係無いと思いますよ。
前言をちょっと訂正。cygwin1.dllの中でSJISの後置バイトかどうかを見ずに¥を扱ってるコード「も」ありますが、libcの中にもありますね。basename.cとか。こういうのも全部直さないとcygwinはSJISを含むパスをまともに扱えない、と言う事で。
# そおかあ、根拠レス = 根拠less、だったのかあ。
# 根拠resだと思ってた。
Re:最近のCygwinの出来からいって (スコア:0)
「ls -lR | cat」 より前に、「touch ソソソソソ」に失敗しました。
Re:最近のCygwinの出来からいって (スコア:0)
たとえば,「C:\表」というディレクトリをエクスプローラでつくって,cygwin の bash で
cd /cygdrive/c/表
ができますか?ってこと.
できますか?
Re:最近のCygwinの出来からいって (スコア:2, 参考になる)
> たとえば,「C:\表」というディレクトリをエクスプローラでつ> くって,cygwin の bash で
> cd /cygdrive/c/表
> ができますか?ってこと.
> できますか?
cd /cygdrive/c/表
は駄目だった。
cd "/cygdrive/c/表"
も駄目だった。
cd '/cygdrive/c/表'
はOKだった。
HYOU='表'
cd /cygdrive/c/$HYOU
もOKだった。
Re:最近のCygwinの出来からいって (スコア:1)
ls するなり find をかけるなりしてみてください。
ad hoc なパッチはいくつか存在するようですが、
1.5.x へ対応した奴はまだないと思います。
Re:最近のCygwinの出来からいって (スコア:0)
抽出するとか(PathStripPath()等)、その手のAPIがそもそも
漢字2バイト目が¥な場合に誤動作するんで、その辺りが原
因だったりしないんですかね?
最新の上記APIがどうだかは知りません。ずっとVC++6.0を使
い続けているので(SDKはアップデートしてますが)。
ちなみに、strrchrは代替品作って何とかしました。
#include <windows.h>
#include <mbctype.h>
LPSTR _strrchr( LPSTR szStr, int c )
{
char *res = NULL;
w
わざわざ自作しなくても (スコア:0)
Re:わざわざ自作しなくても (スコア:0)
そうかぁ、_mb系ですでにあるんですね。iskanji系の代替として
元ソースで使っていた奴なんかは見つけていたんですけどね。
C言語覚えた頃って_mb系なんて無かったんで、そこから知識
増えて無いんですよね・・・。
(探すより作っちゃうのが早いんで・・・)