我想通过使用stat
来检查给定的参数是否是目录。该程序需要2个参数:当第一个参数不是目录或它不存在代码工作正常。为什么stat会返回错误的结果?
但是,当第一个参数是一个目录并存在,并且第二个参数不存在时,程序会说它们都存在 - 错误的结果。我想知道为什么它不起作用。
#include <stdio.h>
#include <sys/stat.h>
int main(int n, char **argv)
{
char *dir_1=argv[1], *dir_2=argv[2];
if (is_dir(dir_1) == 0)
printf("Directory %s exists.\n", dir_1);
else
printf("Directory %s does not exist.\n", dir_1);
if (is_dir(dir_2) == 0)
printf("Directory %s exists.\n", dir_2);
else
printf("Directory %s does not exist.\n", dir_2);
}
int is_dir(char *file)
{
struct stat file_stat;
stat(file, &file_stat);
return((S_ISDIR(file_stat.st_mode)) ? 0 : -1);
}
由于使用功能的前*预计*输出,你应该检查它的返回值,看看它是否曾在所有。 –
如果函数只被调用一次,那么它总是正常工作。但是当我调用它两次时,它在所有情况下都不会返回预期值。 – user3140972
您没有'is_dir'的函数原型,所以编译器假定您传递了一个'int'参数。也许这就是为什么它行事不端。启用并记下所有编译器警告。 –