gpt4 book ai didi

c++ - 替换不同平台的 fpos_t 和 fpos_t._pos

转载 作者:行者123 更新时间:2023-11-27 22:53:50 27 4
gpt4 key购买 nike

在 Linux(ubuntu) 中,fpos_t 在一个结构中

typedef fpos_t {
size_t _pos,
size_t _state
}

在 Windows 中,fpos_t 没有定义。在代码库中,它是这样定义的。

#ifndef _FPOS_T_DEFINED
typedef __int64 fpos_t;
#define _FPOS_T_DEFINED
#endif /* _FPOS_T_DEFINED */

但是,在我的代码中

foo () {
fpos_t fsize;
fgetpos(fp, &fsize); // Function A

bar.len = (unsigned int)fsize; // for windows Function B
bar.body = (char *)SAFE_MALLOC( (size_t)fsize); // for windows
//bar.len = (unsigned int)fsize._pos; // for linux Function B
//bar.body = (char *)SAFE_MALLOC( (size_t)fsize._pos);// for linux
}

问题是在不同平台上编译时,用什么优雅的方式将 fsize._pos 替换为 fsize。我知道的方法

#if defined(LINUX)
//code for linux
#else
//code for windows
#endif

最佳答案

fpos_t 结构被定义为不透明的;没有可移植的方法从 fpos_t ( Cast fpos_t to int or char ) 中提取文件偏移量。

如果您想获取文件位置的字节偏移量,请以二进制模式打开文件并使用ftello ( ftello/fseeko vs fgetpos/fsetpos )。

关于c++ - 替换不同平台的 fpos_t 和 fpos_t._pos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35067816/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com