You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HP Nonstop平台C程序获取2GB以上大文件大小的技术咨询

在HP Nonstop平台的C应用中获取大文件大小的问题

我正在开发一款运行于HP Nonstop平台的C应用,需要获取磁盘文件的大小。当前已实现的方法如下:

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) );

根据文档说明,该方法仅支持大小不超过约2GB的文件:

If the file being referenced is an [...] OSS files larger than approximately 2 gigabytes, item codes will return -1 with no error indication.

针对这一限制,我有两个问题:

  1. 如何获取2GB以上大文件的大小?
  2. 是否可以查看FILE_GETINFOLISTBYNAME_的实现逻辑,以便自行编写适配大文件的实现?

问题1:获取2GB以上大文件的大小

HP Nonstop平台提供了两种可靠的方式来处理大文件大小:

方式1:使用支持64位长度的FILE_GETINFOLISTBYNAME_扩展项

官方提供了专门用于大文件的item code 164,它会返回64位的文件长度(对应long long类型),可以支持远超2GB的文件。修改后的代码示例:

char *filename;
short itemlist;
long long fileLength = 0;
short retCode;

itemlist = 164; /* 64位文件大小 */
retCode = FILE_GETINFOLISTBYNAME_( filename,
                                 (short)strlen(filename),
                                 &itemlist,
                                 1,
                                 (short*)&fileLength,
                                 sizeof(fileLength) );

调用成功后,fileLength会存储文件的完整大小,无2GB限制。

方式2:使用POSIX标准的stat64函数

如果你的应用是在OSS(Open System Services)环境下编译运行,可以直接使用POSIX兼容的stat64接口,它原生支持64位文件大小:

#include <sys/stat.h>
#include <errno.h>

long long get_file_size(const char *filename) {
    struct stat64 st;
    if (stat64(filename, &st) == 0) {
        return st.st_size;
    }
    // 可添加错误处理逻辑,如perror(filename)
    return -1;
}

这种方式更符合跨平台开发习惯,同时完全支持大文件。

问题2:查看FILE_GETINFOLISTBYNAME_的实现逻辑

FILE_GETINFOLISTBYNAME_是HP Nonstop的底层系统调用接口,其实现逻辑属于惠普的闭源核心代码,不对外公开,你无法直接获取或查看它的内部实现。

不过无需自行重写该接口:官方已经提供了适配大文件的扩展(如item code 164),或者可以使用POSIX标准接口来替代,这些方案都能满足大文件大小的获取需求,无需从零实现底层逻辑。


内容的提问来源于stack exchange,提问作者Benjamin Zach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:20:45