根据 Microsoft,什么是 POSIX 函数

What is a POSIX function according to Microsoft

我正在阅读 dos (1992) 的旧 C 代码,在该代码中,我找到了对 filelength.

的调用

我去MSDN了解这个功能:

This POSIX function is deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _filelength instead.

我试图在 POSIX 文档中查找有关此功能的更多信息,但除了 MSDN 参考资料外,我一无所获。

所以:

在此上下文中,POSIX 是 "Portable Operating System Interface",这是一个最初试图使所有不同 UNIX 系统兼容的标准系列。因此,您可以针对 POSIX API 进行编写,如果您不使用非 POSIX API,您可能会有一个程序可以在各种 UNIX 变体上 运行,以及后来的其他 POSIX 支持操作系统。

据我所知,filelength 是一个特定于平台的 C 调用。它可能是特定编译器支持的流行调用,但也可能是特定平台或平台集支持的流行调用。

处理文件的POSIX规范是"POSIX.1: Core Services",它似乎从未包含过filelength函数。可能是 Microsoft 试图将它添加到 POSIX 但失败了,或者可能是 Microsoft 只是错误地记录了它是 POSIX 并通过您上面提到的删除修复了他们的文档。它也可能是 POSIX.1 的古老包含,后来被删除(这是最不可能的选择)。

POSIX.1 的当前版本是第 7 期。它于 2008 年发布,也称为 "IEEE Std 1003.1",因为两个标准委员会决定统一标准以减少标准在野外。 You may browse the api bits of POSIX.1 here.

要使用符合 POSIX 的 API 查找文件大小,您可以使用 stat(char* filename, (struct stat*) s),调用然后读取 st.st_size 字段,或者您可以使用老式的方式打开它,查找结尾 (fseek),然后获取文件指针偏移 ftell.