在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_tCast fpos_t to int or char)提取文件偏移量的便携式方法。

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

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

10-09 19:54