- ベストアンサー
Win SFU (Services for Unix)環境下で2GB超ファイルの末尾を取得する方法
- Win SFU (Services for Unix)環境下で2GB超のファイルの末尾を取得する方法について教えてください。
- 2GB超のファイルを操作する必要があり、Win2Kを使って、その下でUnixコマンドを使用できるよう、SFU (Services for Unix) を使用しています。しかし、tail -c や、dd コマンドを使用してもうまくファイルの末尾を取得できません。別の方法を教えてください。
- ファイルのサイズは都度変わり、2GB以上のファイルが既に書き込まれています。NTFS上においては、単純なファイル操作コマンドは機能しています。SFUのkshを使用しており、他の処理と連携するシステムの一部として構築しています。手動での操作を排除し、2GB超のファイルの末尾を取得する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SFUで扱えるファイルサイズの最大を確認してみて下さい。 多くのUNIX/Linuxはfopen()を利用してますが、 ファイル内のオフセットをlong(int)で持っているので、これだと最大オフセットが 2^31=2Gで、それを超えるサイズのファイルはアクセスできません。 Solarisなどでは64bitモードがあるのでfopen64()で大規模ファイルにアクセス できます。 fopen64()が使えるなら、C言語などで簡単なプログラムを組めば良いです。
その他の回答 (1)
- xjd
- ベストアンサー率63% (1021/1612)
最近のLinuxではtail、wcコマンドなどは内部で以下のシステムコール を実行しています。 open("/var/log/messages", O_RDONLY|O_LARGEFILE) = 3 O_LARGEFILEの意味を確認すると、 # man 2 open OPEN(2) System calls OPEN(2) NAME open, creat - open and possibly create a file or device SYNOPSIS #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode); DESCRIPTION O_LARGEFILE On 32-bit systems that support the Large Files System, allow files whose sizes cannot be represented in 31 bits to be opened. O_LARGEFILEを指定すると 2^32=4GB のサポートとなり、指定しない場合は 2^31=2GB となります。
お礼
返答が遅くなりましたが、質問への回答ありがとうございます。 結局のところ、Cでファイルの末尾を取得するためのコーディングに入ることになりましたので、参考にさせていただきます。