我正在尝试创建一个处理文件和目录的简单程序,但我有两个主要问题:
编辑:对于所有建议使用stat()
或类似功能的人,我已经研究过了,虽然它可能会回答我的第一个问题,但我可以'弄清楚它将如何回答第二个......
答案 0 :(得分:6)
由于您正在查询命名管道/符号链接等,您可能在* nix上,因此请使用 lstat()功能
struct stat info;
if(lstat(name,&info) != 0) {
if(errno == ENOENT) {
// doesn't exist
} else if(errno == EACCES) {
// we don't have permission to know if
// the path/file exists.. impossible to tell
} else {
//general error handling
}
return;
}
//so, it exists.
if(S_ISDIR(info.st_mode)) {
//it's a directory
} else if(S_ISFIFO(info.st_mode)) {
//it's a named pipe
} else if(....) {
}
可以使用的S_ISXXX宏的文档here。
答案 1 :(得分:2)
stat()功能可以为您提供所需的一切(或更具体地lstat()
,因为stat()
将在此链接之后。)
答案 2 :(得分:1)
使用stat(或者如果您希望获取有关符号链接的信息,而不是关注它并获取有关目的地的信息,lstat)
NAME
stat - 获取文件状态
概要
#include <sys/stat.h>
int stat(const char *restrict path, struct stat *restrict buf);
说明
stat()函数应获取有关指定文件的信息,并将其写入buf参数指向的区域。 path参数指向命名文件的路径名。不需要读取,写入或执行指定文件的权限。在实现定义的条件下,提供附加或备用文件访问控制机制的实现可能导致stat()失败。特别是,系统可能会拒绝路径指定的文件的存在。
如果指定文件是符号链接,则stat()函数应使用符号链接的内容继续路径名解析,并且如果文件存在,则应返回与结果文件有关的信息。
buf参数是一个指向stat结构的指针,如标题中所定义,其中放置了与文件有关的信息。