2012-12-05 76 views
1

我正在使用ubuntu linux,我只是一个初学者是c语言我创建了一个程序,当在一个文件夹中启动时创建一个锁文件,但文件和文件夹都与[DOT]一样.folder和.file和linux隐藏这样的文件和文件夹,我有另一个程序,检查文件是否存在,如果它存在,那么程序正在运行,如果它不是那么简单这里是我的代码用c语言打开隐藏文件

FILE* lockfile = fopen("/.folder/.lock", "r"); 
if (!lockfile) { 
    printf("Cannot find lock file"); 
} else { 
    printf("lock file found"); 
} 

该文件夹在根目录中,我只是想读取文件,所以我给了“r”作为访问我做了很多搜索,但只发现了基于Windows的程序的答案任何人都可以指出我在哪里错了或任何解决方案?我如何通过c读取linux中的隐藏文件和文件夹?

编辑:添加的图像,使事情多一点明确

folder http://i47.tinypic.com/2z9cvpl.png

.folder目录它拥有所有当前用户

file http://i47.tinypic.com/23j6747.png 许可的.lock文件还具有读取权限对于当前用户,所以我不认为这是有问题的权限,或者我仍然是错的?

+2

'fopen'打开以点开头的文件名没有问题。 – cnicutar

+0

请运行'ls -al/.folder/.lock'。我想象的权限不是你的想法。 – djechlin

+0

@cnicutar - 我不知道,但它总是说找不到锁文件只是这件事是我真的不明白它有什么问题 @djechlin - 如果我在像'ls -al /这样的终端中运行该命令。文件夹“,然后它显示.lock文件,但我从来不知道你可以在'fopen'运行命令也 –

回答

3

在* nix中没有这种“隐藏”文件。前导点是一种惯例,后面跟着禁止它们显示的工具,但它们和系统中任何其他类型相同的文件系统对象没有区别。

+0

为什么不能读取文件是因为文件和文件夹位于根目录? –

+0

这是因为您没有足够的权限来读取它 –

+0

您的意思是作为用户right –

4
i just wanna read the file so i gave "r" as the access 

问题出在这里。如果您只有只读读取(r)访问文件夹,您只能列出(ls)它的内容,而不能读取或写入该文件夹内的任何文件。这是fopen失败的原因。

如果您想读取其中的文件,您还应该对该目录执行(x)权限。因此该目录将同时读取&执行权限(rx)。

+0

我重读了你的答案,并且看到了我第一次误读的东西。执行权限*本身*不足以读取目录中的文件。如果你把最后一句改为“你应该给读*和*执行('rx')许可”,那么我认为这将解决混乱。 –

+0

@KingsIndian - 我试过了,但仍然不起作用,当我从位置看文件时看不到它,但是如果我使用'ls -la/.folder',那么它会显示所有文件,包括'.lock '文件 –

+0

@KingsIndian - fopen中的访问权限还没有改变用户权限吗?我的意思是我没有登录作为根源是这个问题? –