2012-10-14 63 views
0

我通过Linux手册页找到了access命令,但不知道该命令的应用。如何使用linux访问命令和测试命令有什么区别

有人可以解释这一点。

是否可以这样使用:

access -f filename; 

如果我要检查文件是否存在与否? 但我得到一个错误:

The transaction failed: no-cache, 

同样的事情发生的:

access -w filename; 
如果我要检查文件是否是当前用户写入

此外,这也可以很容易地用test命令轻松完成。那么这两个命令之间的确切区别是什么?请详细说明。 在此先感谢。

+0

请发布以下命令的输出:1)'which access'; 2)'rpm -q --whatprovides $(which access)';顺便说一句,如果你看到它类似[这一个](http://linux.die.net/man/2/access)的人,这是AC/C++功能,而不是一个shell命令... –

+0

@Oded: '哪个access'不能提供'access'的路径。但我的问题是很多linux在线书籍都将'access'识别为linux命令。另外它可能是一个c/C++函数,但我认为它在linux中也有一些应用程序,因为许多其他的linux命令也只是对某些c/C++函数的系统调用。 –

回答

2

这不是Linux命令。这是C函数,可以通过unistd.h库加载。

#include <unistd.h> 
#include <stdio.h> 

int main() { 
    int writeable; 
    writeable = access("/path/to/file", W_OK); 
    if (writeable == -1) 
     printf("Not writeable!"); 
    else 
     printf("Writeable!"; 

    return 0; 
} 

注意,它返回0上的成功:

您可以在一个C程序按如下方式使用它。 0对于C和许多其他语言都是错误的,但在这种情况下,这意味着true

事实上,你可以看到man access并不意味着它是一个Linux命令,因为任何标准的Linux发行版都为每个C库和函数提供手册页。您也可以看到man malloc。您可以通过查看标题来确定它是Linux命令还是C库手册页。例如man access

ACCESS(2)     Linux Programmer's Manual     ACCESS(2) 

NAME 
     access - check real user's permissions for a file 

SYNOPSIS 
     #include <unistd.h> 

     int access(const char *pathname, int mode); 

正如你可以看到,第一行指出Linux Programmer's Manual

+0

它完全清除我的查询。非常感谢 –

相关问题