如何检查文件是否不存在或存在但我没有阅读权限?
我知道我可以使用类似的东西perror()或strerror(errno)打印消息,但如果我想要一个我可以这样处理的检查,我该怎么做:
if (not exist) {
create file;
}
else if (no permission) {
exit;
}
Run Code Online (Sandbox Code Playgroud)
这是我正在处理的代码.我认为err当文件不存在或者我没有权限时总是= -1,所以我不知道如何处理它.
int fdPath, n, err;
unsigned char buffer[4096];
char *path;
// get path
path = argv[1];
// get file descriptor from opening file
fdPath = open(path, O_RDWR);
err = read(fdPath, buffer, 4096); // read file in path
Run Code Online (Sandbox Code Playgroud)
从open(2)手册页:
RETURN VALUE
open(), openat(), and creat() return the new file descriptor,
or -1 if an error occurred (in
which case, errno is set appropriately).
Run Code Online (Sandbox Code Playgroud)
这告诉您,如果您想找出系统调用失败的原因,您需要检查该errno变量,该变量可能设置为EACCESS(权限被拒绝)或ENOENT(没有此类文件或目录)等。
这看起来是一个合理的例子。
小智 5
不要试图提前知道您是否可以写入或读取文件 - 当您的支票与实际访问之间的信息发生变化时,您将遇到竞争条件.做类似以下的事情
int fd = open(path, O_RDWR|O_CREAT, 00666);
if (fd < 0) exit(1);
Run Code Online (Sandbox Code Playgroud)
如果您必须知道无法打开或创建文件的原因,您当然需要更多代码来检查errno.
编辑以澄清:O_CREAT只会在尚未存在的情况下尝试创建该文件.但是这个检查是在操作系统内完成的,所以它是你的进程的原子操作(没有其他进程可以改变尝试打开文件和尝试创建它之间的情况).
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |