您的位置:首页 > 运维架构 > Linux

linux判断文件是否存在

2012-06-27 09:39 309 查看


linux判断文件是否存在

分类: C/C++ linux2011-07-06
10:05 2254人阅读 评论(0) 收藏 举报

对于判断文件是否存在,每个人有不同的方法!我通常采用两种方法 : open 和 access ;

这个俩个方法有相似之处,且有不同之处;下面为大家详细说明他们的不同之处:

open 是打开,读写等操作文件的一个函数,access就是一个判断文件权限的函数。在linux下,由于文件有不同的权限,当当前用户没有对此文件的读权限的时候,用来判断文件是否存在,显然不合适。而access却可以做到。

open 的第一个参数是文件路径,第二个参数是打开文件选项,常用的有O_RDONLY(读),O_WRONLY(写),O_RDWR(读写),O_CREAT(创建)。 第三个参数通常在创建文件的时候才使用,给文件设定权限使用。

access的第一个参数是文件路径,第二个参数是测试的模式。常用的有R_OK:测试读权限,W_OK:测试写权限,X_OK:测试执行权限,F_OK:测试文件是否存在;

我做个例子,写一个小程序来看两者的区别。

测试测序:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <fcntl.h>

int main(int argc , char **argv)

{

char path[50];

memset(path,0,50);

sprintf(path,"%s","./test");

int fd;

printf("access function -------------------------/n");

if((fd = access (path,F_OK)) == 0)

printf("[access] file exist!/n");

else

printf("[access] file not exist!!/n");

if((fd = access (path,R_OK)) == 0)

printf("[access] read file ok!/n");

else

printf("[access] read file no!/n");

if((fd = access (path,W_OK)) == 0)

printf("[access] write file ok!/n");

else

printf("[access] write file no!/n");

if((fd = access (path,X_OK)) == 0)

printf("[access] execute file ok!/n");

else

printf("[access] execute file no!/n");

printf("open function -------------------------/n");

if((fd = open (path,O_RDONLY)) == -1)

printf("[open] open no!/n");

else

{

close(fd);

printf("[open] open ok!/n");

}

if((fd = open (path,O_WRONLY)) == -1)

printf("[open] write no!/n");

else

{

close(fd);

printf("[open] write ok!/n");

}

if((fd = open (path,O_RDWR)) == -1)

printf("[open] rdwr no!/n");

else

{

close(fd);

printf("[open] rdwr ok!/n");

}

}

首先我们创建一个普通文件 test , 修改文件权限为0744,修改文件属主为root. 我们在普通用户mpeg4下操作.

[mpeg4@mc2800 file1]$ sudo chown root:root test

[mpeg4@mc2800 file1]$ sudo chmod 0744 test

[mpeg4@mc2800 file1]$ ls -l

total 20

-rwxrwxrwx 1 mpeg4 mpeg4 7157 2009-09-17 09:37 file

-rwxrwxrwx 1 mpeg4 mpeg4 991 2009-09-17 09:44 file.c

-rwxrwxrwx 1 mpeg4 mpeg4 94 2009-09-17 08:56 makefile

-rwxrwxrwx 1 mpeg4 mpeg4 3808 2009-08-20 13:52 records

-rwxr--r-- 1 root root 0 2009-09-17 10:06 test

好了,我们运行我的程序看结果:

[mpeg4@mc2800 file1]$ ./file

access function -------------------------

[access] file exist!

[access] read file ok!

[access] write file no!

[access] execute file no!

open function -------------------------

[open] open ok!

[open] write no!

[open] rdwr no!

很明显在用户有读权限的情况下,使用那个函数用来判断文件是否存在都可以。

现在我们把文件的权限改为0740:

sudo chmod 0740 test

再看测试结果:

[mpeg4@mc2800 file1]$ ./file

access function -------------------------

[access] file exist!

[access] read file no!

[access] write file no!

[access] execute file no!

open function -------------------------

[open] open no!

[open] write no!

[open] rdwr no!

可以看到,文件权限改变了,就不能用open函数来判断文件是否存在了。

我相信很多人都喜欢用open函数来判断文件是否存在,当然大家也都知道关于权限的问题,所以会采用一些必要测措施来控制出错。但是我建议判断文件是否存在最好用access函数。当我们要读取文件内容的时候可以使用open来判断文件是否存在,就算是因为没有读权限或者文件真的不存在,都无法实现读的操作,我们的目的也就达到了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: