在Linux(或POSIX)中重新打开只读文件

时间:2017-08-17 02:40:32

标签: c linux posix

我以读/写模式打开文件并执行一系列读,写和搜索(来自用户输入)。

稍后我想把文件设为只读,以防止进一步写入文件。

是否有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

1 个答案:

答案 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仅供写作。