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宏也可以在

也许您应该只检查配置宏。