今天帮旭哥哥看程序,需要编译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" 结构体变量中,以便在程序的其他地方使用这些信息。