我以读/写模式打开文件并执行一系列读,写和搜索(来自用户输入)。
稍后我想把文件设为只读,以防止进一步写入文件。
是否有Linux(或POSIX)功能?也许有些fcntl
致电?
或者我唯一的选择是保存文件中的当前位置,关闭它并重新打开RD_ONLY
?
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int fd = open("/path/to/file", O_RDWR);
// mixture of:
write(fd, ...);
lseek(fd, ...);
read (fd, ...);
// etc
...
// make file read-only ???
read (fd, ...); // OK
lseek(fd, ...); // OK
write(fd, ...); // error
答案 0 :(得分:4)
至少通过调用fcntl
这是不可能的,因为POSIX文档说(强调是我的):
fcntl()
:<强> F_SETFL 强>
为文件设置
fcntl.h
中定义的文件状态标志 与来自相应位的fildes相关的描述 第三个参数arg,取为int类型。 与文件对应的位 访问模式和文件创建标志,如fcntl.h
中所定义的那样 在arg中设置应忽略。如果arg中的任何位不是那些 这里提到的是由应用程序改变的,结果是 未指定的。
和
fcntl.h
O_ACCMODE用于文件访问模式的掩码。
标题应定义 遵循符号常量,用作文件访问模式 open(),openat()和fcntl()。除了之外,这些值应该是唯一的 O_EXEC和O_SEARCH可能具有相同的值。价值应该是 适用于#if预处理指令。
O_EXEC仅供执行(非目录文件)。结果是 如果此标志应用于目录,则未指定。 O_RDONLY打开 只读。
O_RDWR开放阅读和写作。
O_SEARCH打开 目录仅供搜索。如果此标志为,则结果未指定 应用于非目录文件。
O_WRONLY仅供写作。