英文:
C on HP Nonstop: How to obtain filesize of large file > 2GB?
问题
I'm working on a C application which is running on HP-Nonstop and it needs to get the size of files on disk. The already implemented way of doing that is the following:
char *filename;
short itemlist;
long fileLength = 0;
short retCode;
itemlist = 142; /* file size */
retCode = FILE_GETINFOLISTBYNAME_( filename,
(short)strlen(filename),
&itemlist,
1,
(short*)&fileLength,
sizeof(fileLength) );
As I read in the documentation this only works for files of size not greater than about 2GB:
"If the file being referenced is an [...] OSS files larger than approximately 2 gigabytes, item codes will return -1 with no error indication."
Thus my questions:
- How can I obtain the size of files bigger than 2GB?
- Is there a way to have a look into how
FILE_GETINFOLISTBYNAME_
is implemented? Maybe one could write their own implementation for large files.
英文:
I'm working on a C application which is running on HP-Nonstop and it needs to get the size of files on disk. The already implemented way of doing that is the following:
char *filename;
short itemlist;
long fileLength = 0;
short retCode;
itemlist = 142; /* file size */
retCode = FILE_GETINFOLISTBYNAME_( filename,
(short)strlen(filename),
&itemlist,
1,
(short*)&fileLength,
sizeof(fileLength) );
As I read in the documentation this only works for files of size not greater than about 2GB:
>If the file being referenced is an [...] OSS files larger than approximately 2 gigabytes, item codes will return -1 with no error indication.
Thus my questions:
- How can I obtain the size of files bigger than 2GB?
- Is there a way to have a look into how
FILE_GETINFOLISTBYNAME_
is implemented? Maybe one could write their own implementation for large files.
答案1
得分: 2
不确定为什么选项142即使使用无符号32位变量也不返回2 GB文件的大小。
您可以使用选项191,它将以64位变量返回大小。
以下是选项142的文档,建议对于更大的文件大小使用选项191。
聚合EOF。对于磁盘对象,文件的文件结束值。
对于已经打开整个文件的分区文件,返回整个文件的文件结束值。返回值
为%hFFFFFFFF表示文件结束值无法适应
这个无符号四字节属性。在这种情况下,要获取
文件结束值,请使用八字节属性,即项目代码
191。已被项目191替代。
英文:
Not sure why option 142 does not return the size for 2 GB file even though it uses unsigned 32 bit variable to return the size.
You can use option 191 which would return the size in 64 bit variable.
Here is documentation for option 142 which is recommending to use option 191 for larger file size.
> Aggregate EOF. For disk objects, the end-of-file value of the file.
> For a partitioned file where the entire file has been opened, the
> end-of-file value of the entire file is returned. A returned value
> of %hFFFFFFFF indicates that the end-of-file value cannot fit into
> this unsigned four-byteattribute. In this case, to obtain the
> end-of-file value, use the eight-byte attribute, which isitem code
> 191. Superseded by item 191
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论