读取以单斜杠或双斜杠开头的文件路径的区别

时间:2014-01-06 09:24:36

标签: iphone c linux

我最近有一个应用程序在iPhone文件系统的目录上执行递归树遍历。我意识到当我的路径以///开头时,有一些目录会给我一个不同的输出。例如:

/private/var/mobile/Applications/<Unique String>/smth.txt

会给我不可读不可写,而

//private/var/mobile/Applications/<Unique String>/smth.txt   

会给我可读可写

单斜杠或双斜杠有什么不同吗?我已经在网上阅读过,但2之间应该没有区别。但是为什么我会得到不同的结果。我正在使用access()调用来获取文件/目录的accessiblity。

//check read access
rval = access (path, R_OK);
 if (rval == 0)
  printf ("%s is readable\n", path);
 else
  printf ("%s is not readable (access denied)\n", path);

//check write access
 rval = access (path, W_OK);
 if (rval == 0)
  printf ("%s is writable\n", path);
 else 
  printf ("%s is not writable\n", path);  

修改
我意识到当我的路径之后有一个额外的斜杠时,它会给我不可读和不可写

/private/var/mobile/Applications/<Unique String>/smth.txt/

在路径产生影响后会做一个额外的斜杠吗?

1 个答案:

答案 0 :(得分:0)

你意识到这不应该发生(也可能不会发生)。 access可能由于文件权限之外的其他原因而失败,因此明智的第一步是更改代码以显示errno中返回的错误。可能有一个简单的解释,例如,额外的斜线使你超过PATH_MAX或类似。

int rval;

//check read access
rval = access (path, R_OK);

if (rval == 0)
    printf ("%s is readable\n", path);
else
{
    perror("access read");
    printf ("%s is not readable (access denied)\n", path);
}

//check write access
rval = access (path, W_OK);

if (rval == 0)
    printf ("%s is writable\n", path);
else
{
    perror("access write");
    printf ("%s is not writable\n", path);
}