我正在读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”是什么意思?
>此功能是否存在于Microsoft库之外?
最佳答案 在这种情况下,POSIX是“可移植操作系统接口”,它是一系列标准,最初试图使所有不同的UNIX系统兼容.因此,您可以针对POSIX API进行编写,并且如果您没有使用非POSIX API,您可能会拥有一个可以在各种UNIX变体上运行的程序,以及后来支持其他POSIX操作系统的程序.
据我所知,filelength是一个特定于平台的C调用.它可能是特定编译器支持的流行调用,但可能是特定平台或平台集支持的流行调用.
处理文件的POSIX规范是“POSIX.1:核心服务”,它似乎从未包含文件长度函数.可能是微软试图将它添加到POSIX并失败,或者可能是微软错误地记录了它是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获取文件指针偏移量.