添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

今天帮旭哥哥看程序,需要编译libconfig这个库。该库的源码里用到了S_ISDIR,在编译时却报错说没有找到该声明。在网上一番搜索之后发现,这个宏是Linux里才有的,在Windows没有这个宏。(Linux环境中它在sys/stat.h中定义)。

在Windows下应用时,需要自己定义该宏,定义方法如下:

#define S_ISDIR(m) (((m) & 0170000) == (0040000))

今天帮旭哥哥看程序,需要编译libconfig这个库。该库的源码里用到了S_ISDIR,在编译时却报错说没有找到该声明。在网上一番搜索之后发现,这个宏是Linux里才有的,在Windows没有这个宏。(Linux环境中它在sys/stat.h中定义)。 ino_t d_ino; //索引号%ld off_t d_off;//在目录文件中的偏移量 %ld unsigned short d_reclen;//这个记录的长度%u unsigned char d_type;//文 S_ISREG(st_mode) // 是否是一个常规文件. S_ ISDIR (st_mode) // 是否是一个目录 S_ISCHR(st_mode) // 是否是一个字符设备. S_ISBLK(st_mode) // 是否是一个块设备 S_ISF... 在sys/stat.h中还定义了更多相关的函数 The following symbolic names for the values of type mode_t shall also be defined. File type: S_IFMT Type of file. S_IFBLK Block special.
搞了几个跨Linux与 Windows 的项目,碰到很多问题,记下来,以供查考。另外,因为水平的原因,肯定错误在所难免,请读者一定指正。   如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器, Windows 均表示 Windows XP系统,Visual Studio 2005 sp1编译环境。   下面大概分几个方面进行罗列: socket   Linux要包含 S_ISFIFO(st_mode):是否 是一个FIFO文件. S_ISSOCK(st_mode):是否是一个SOCKET文件 man 2 stat 可以查到stat数据结构,其中的st_mode就是上面几个宏的输入参数 struct stat
char filePath[] = "C:/test"; // At frist, check path exists or not if( !PathFileExists(filePath) ) BOOL isDir SuccessFlg = FALSE; // Define create directory flag SECURITY_ATTRIBUTES attrib; // Define security attributes
struct stat st; stat(path,&st); if(S_ ISDIR (st.st_mode)) { return 1; } else{ return 0; }
&st)是什么意思? "struct stat st; stat(path, &st)" 意思是:在程序中定义了一个名为 "st" 的结构体变量,该变量的类型是 "struct stat"。随后,调用了 "stat" 函数,并将两个参数传递给该函数:一个是文件的路径名 "path",另一个是 "st" 的地址 "&st"。 这个函数的作用是用于获取文件的信息,并将这些信息存储在 "st" 结构体变量中,以便在程序的其他地方使用这些信息。