检查文件是否不存在或权限被拒绝 C
Check if file does not exist or permission denied C
如何检查文件是否不存在或存在但我没有读取权限?
我知道我可以使用 perror()
或 strerror(errno)
之类的东西来打印消息,但是如果我想要一个我可以像这样处理的支票,我该怎么做:
if (not exist) {
create file;
}
else if (no permission) {
exit;
}
这是我正在处理的代码。我觉得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
来自 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).
这告诉你,如果你想找出系统调用失败的原因,你需要检查 errno
变量,它可能设置为类似 EACCESS
的东西(permissioned denied ) 或 ENOENT
(没有这样的文件或目录)等
This 看起来是一个合理的例子。
不要尝试提前知道您是否可以写入或读取文件——当您的检查和实际之间的信息发生变化时,您将遇到竞争条件使用权。做类似下面的事情
int fd = open(path, O_RDWR|O_CREAT, 00666);
if (fd < 0) exit(1);
如果您必须知道无法打开或创建文件的原因,您当然需要更多代码来检查 errno
。
编辑澄清:O_CREAT
只会在文件不存在时尝试创建文件。但是这个检查是在操作系统内部完成的,所以它对你的进程来说是一个原子操作(没有其他进程可以改变尝试打开文件和尝试创建文件之间的情况)。
在 POSIX 系统上,您可以使用 access 检查文件是否存在 and/or 是否可读。但是,请注意,如果您首先检查文件是否存在,然后如果不存在,则创建它,则可能存在竞争(在检查存在与创建之间)。
如何检查文件是否不存在或存在但我没有读取权限?
我知道我可以使用 perror()
或 strerror(errno)
之类的东西来打印消息,但是如果我想要一个我可以像这样处理的支票,我该怎么做:
if (not exist) {
create file;
}
else if (no permission) {
exit;
}
这是我正在处理的代码。我觉得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
来自 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).
这告诉你,如果你想找出系统调用失败的原因,你需要检查 errno
变量,它可能设置为类似 EACCESS
的东西(permissioned denied ) 或 ENOENT
(没有这样的文件或目录)等
This 看起来是一个合理的例子。
不要尝试提前知道您是否可以写入或读取文件——当您的检查和实际之间的信息发生变化时,您将遇到竞争条件使用权。做类似下面的事情
int fd = open(path, O_RDWR|O_CREAT, 00666);
if (fd < 0) exit(1);
如果您必须知道无法打开或创建文件的原因,您当然需要更多代码来检查 errno
。
编辑澄清:O_CREAT
只会在文件不存在时尝试创建文件。但是这个检查是在操作系统内部完成的,所以它对你的进程来说是一个原子操作(没有其他进程可以改变尝试打开文件和尝试创建文件之间的情况)。
在 POSIX 系统上,您可以使用 access 检查文件是否存在 and/or 是否可读。但是,请注意,如果您首先检查文件是否存在,然后如果不存在,则创建它,则可能存在竞争(在检查存在与创建之间)。