• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Win SFU (Services for Unix)環境下で2GB超ファイルの末尾を取得したい)

Win SFU (Services for Unix)環境下で2GB超ファイルの末尾を取得する方法

このQ&Aのポイント
  • Win SFU (Services for Unix)環境下で2GB超のファイルの末尾を取得する方法について教えてください。
  • 2GB超のファイルを操作する必要があり、Win2Kを使って、その下でUnixコマンドを使用できるよう、SFU (Services for Unix) を使用しています。しかし、tail -c や、dd コマンドを使用してもうまくファイルの末尾を取得できません。別の方法を教えてください。
  • ファイルのサイズは都度変わり、2GB以上のファイルが既に書き込まれています。NTFS上においては、単純なファイル操作コマンドは機能しています。SFUのkshを使用しており、他の処理と連携するシステムの一部として構築しています。手動での操作を排除し、2GB超のファイルの末尾を取得する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

SFUで扱えるファイルサイズの最大を確認してみて下さい。 多くのUNIX/Linuxはfopen()を利用してますが、 ファイル内のオフセットをlong(int)で持っているので、これだと最大オフセットが 2^31=2Gで、それを超えるサイズのファイルはアクセスできません。 Solarisなどでは64bitモードがあるのでfopen64()で大規模ファイルにアクセス できます。 fopen64()が使えるなら、C言語などで簡単なプログラムを組めば良いです。

参考URL:
http://jp.sun.com/products/software/solaris/wp/Sol_file/sol_4.html
stosh
質問者

お礼

返答が遅くなりましたが、質問への回答ありがとうございます。 結局のところ、Cでファイルの末尾を取得するためのコーディングに入ることになりましたので、参考にさせていただきます。

その他の回答 (1)

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

最近の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 となります。