S_ISREG宏未定义
问题
- 是posix宏S_ISREG,S_ISDIR等linux吗? 我需要找出因为我正在尝试编译CURL并且它试图在Windows上使用它们
- 我可以使用哪些包含文件在Windows上访问它们。
这是违法的代码
/*we ignore file size for char/block devices, sockets etc*/ if(S_ISREG(fileinfo.st_mode)) uploadfilesize= fileinfo.st_size; }
它会导致错误
error LNK2019: unresolved external symbol _S_ISREG referenced in function _operate file tool_operate.obj
它们在以下问题中引用
- 如何使用S_ISREG()和S_ISDIR()POSIX宏?
- 在C和C ++中区分unix目录和文件
- 在C中读取目录的问题
显然S_ISREG()是一堆posix宏的一部分,显然应该告诉我们文件是否是“常规文件”,但我发现的所有示例都有linux特定的包含文件。
在Windows上没有这样的东西,你可以使用FindFirstFile,FindNextFile win32 api,返回结构包含类似但不一样的东西。
如果你使用gcc / mingw库,他们有一个stat()模拟。 您需要为该宏包含sys / stat.h。
目前curl 7.21.5在setup.h中定义了这个:
#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif
在Windows上尝试添加下划线( _S_ISREG
)。 在MinGW的lib中, S_ISREG
宏也可以在
也许您应该只检查配置宏。