首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用标志目录和O_CREAT打开时的不直观行为

是指在使用open()函数打开一个目录时,如果同时指定了O_CREAT标志,会出现一些不符合直觉的行为。

具体来说,当我们使用open()函数打开一个目录时,通常期望会返回一个错误,因为目录不是一个可读写的文件。然而,如果我们同时指定了O_CREAT标志,open()函数会创建一个文件,而不是返回错误。

这种行为的原因是,O_CREAT标志告诉open()函数,如果文件不存在,则创建一个新文件。由于目录本质上也是一个特殊的文件,因此open()函数会尝试创建一个新的文件,并将目录的权限设置为指定的权限。

然而,这种行为是不直观的,因为我们通常不希望在打开目录时创建一个新文件。因此,在使用open()函数打开目录时,应该避免同时指定O_CREAT标志,以免产生不符合预期的结果。

在腾讯云的云计算服务中,与目录相关的服务和产品包括:

  1. 对象存储(COS):腾讯云对象存储(Cloud Object Storage,COS)是一种高可扩展性、低成本的云端存储服务,可以存储和检索任意数量和类型的数据。它可以用于存储文件、图片、视频等各种类型的数据。了解更多信息,请访问:腾讯云对象存储(COS)
  2. 云服务器(CVM):腾讯云云服务器(Cloud Virtual Machine,CVM)是一种弹性计算服务,提供可扩展的计算能力,用于运行各种应用程序。通过云服务器,您可以轻松创建、部署和管理虚拟机实例。了解更多信息,请访问:腾讯云云服务器(CVM)
  3. 云存储网关(CSG):腾讯云云存储网关(Cloud Storage Gateway,CSG)是一种将本地存储与云存储无缝集成的解决方案。它可以将本地存储设备映射为云存储服务,实现本地和云端数据的高效传输和备份。了解更多信息,请访问:腾讯云云存储网关(CSG)

请注意,以上提到的产品和服务仅是腾讯云的一部分,还有其他丰富的产品和服务可供选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

详解Linux文件操作知识点

mode&umask),其中umask 代表了文件在创建需要去掉一些存取权限,它只影响读、写执行权限,调用函数为int umask(int newmask)。...以只读方式打开文件 O_WRONLY 以只写方式打开文件 O_RDWR 以读写方式打开文件 O_APPEND 以追加方式打开文件 O_CREAT 创建一个文件 O_EXEC 如果使用了...fopen()实现打开指定文件filename,其中mode为打开模式,Linux 系统区分二进制文件和文本文件。.../boot—-启动Linux使用一些核心文件,包括一些连接文件以及镜像文件,如vmlinuz、initrd.img /dev—-设备文件存储目录,应用程序通过对这些文件读写控制就可以访问实际设备.../var—–经常被修改目录放在这个目录下,如日志文件 /sys—-内核设备树一个直观反映。当一个内核对象被创建时候,对应文件目录也在内核对象子系统中被创建。

74521

系统编程-简洁而不简单文件操作

O_EXEC 执行打开 O_SEARCH 搜索打开(针对目录) 而下面的选项是可选: O_APPEND 写追加到文件末尾 O_CREAT 文件不存在创建,且必须指定文件访问权限位 O_TRUNC...还记得在《不可不知三种缓冲》中说吗?标准错误通常是不带缓冲打开一个文件,不存在创建 既然不存在,会打开失败,那么不存在就创建好了,这就用到了O_CREATE标志。...注意到,多个标志使用|构成flags参数。 打开一个文件,存在截断 好了,前面已经实现了文件不存在,创建,存在也可以正常打开,如果存在,又不想要原先内容?那就需要用到O_TRUNC标志。...在打开文件后追加内容 如果想在打开文件后追加内容,那么可以使用O_APPEND标志: int fd = open("test.txt",O_WRONLY | O_CREAT | O_APPEND);...只读打开文件进行写操作 前面提到了5个打开标志,如果以只读方式尝试写会怎样?

45710

Linux环境下open函数分析(二)

这里表明当我们打开一个不存在文件,在使用open函数里面形参flag为O_CREAT,它就会自动创建这个不存在文件。...例如下面,我在day目录打开一个不存在文件b.txt,然后通过这个O_CREAT就会在day目录下创建这个不存在文件: #include #include <sys/types.h...这里大概是讲了:在linux内核2.6版本以及后面的版本可以单独使用O_EXCL对块设备来说的话,一般的话O_EXCLO_CREAT是要结合一起来用(这样做目的是当我们去创建一个新文件,如果我们不小心在写代码输入还是之前已经存在文件...,同时使用O_EXCLO_CREAT作为参数传入到open函数中去做为形参,这样可以给我们一个报错提醒,就知道没有创建一个新文件成功)。...这里的话主要讲的是对文件操作阻塞式非阻塞式:如果一个函数阻塞式,则我们调用这个函数当前进程有可能被卡住,阻塞住,实质是这个函数内部要完成事情条件不具备,当前没法做,要等待条件成熟函数被阻塞助理就不能立刻返回

1.1K10

Linux-基础IO

1; } //文件操作介于打开关闭之间 fclose(fp);//关闭文件 return 0; } 注意:   当以 ‘w’ 方式打开文件:该文件会被清空。   ...当我们使用C语言运行一个程序时候,操作系统会默认将这三个流给打开,于是,我们使用printf、scanf、gets、puts等接口可以直接使用。   ...通常打开文件常用方式分为以下几种: flags选项 含义 O_RDONLY 以只读方式打开文件 O_WRONLY 以只写方式打开文件 O_APPEND 以追加方式打开文件 O_CREAT 文件不存在...来做出 不同行为,同样,open接口flags参数也是如此使用方式,例如,我们以 使用open模拟fopen函数 ‘w’ 行为: #include #include<sys/types.h...因为0、1、2这三个文件描述符默认打开,但是这里我把它关闭(仅关闭0位置),再使用 open 创建一个文件,会发生什么?

7510

【Linux】从零认识文件操作

基础IO篇章我们将讲解以下内容: 复习C文件IO相关操作 认识文件相关系统调用接口 认识文件描述符,理解重定向 对比fdFILE,理解系统调用库函数关系 理解文件系统中inode概念 认识软硬链接...当我们使用完文件之后一定一定要关闭文件:fclose(fp) 我们要进行文件操作,前提是我们程序跑起来了!文件打开关闭,是CPU在执行我们程序。..., int flags, mode_t mode); 第一个参数C语言fopen第一个参数一致(表示文件路径或当前目录文件名) 第二个参数表示想怎样打开文件,传入标志位 第三个参数表示创建文件权限...常用标志位参数: O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR : 读,写打开 上面三个常量,必须指定一个且只能指定一个 O_CREAT : 若文件不存在,则创建它。...所以语言层文件操作函数,本质底层是对系统调用封装!通过不同标志封装来体现w r a+等不同打开类型! 我们在使用文件操作,一般都要使用语言层系统调用,来保证代码可移植性。

12910

嵌入式Linux:文件IO标准IO库

flags:调用 open 函数需要提供标志,包括文件访问模式标志以及其他文件相关标志。这些标志使用宏定义进行描述,并都是常量。...open函数flags参数用于指定打开文件行为权限。下面是一些常用flags参数值: O_RDONLY:只读方式打开文件。 O_WRONLY:只写方式打开文件。...O_NONBLOCK:非阻塞方式打开文件,在没有数据可读取阻塞。 O_SYNC:同步写入方式打开文件,对写入文件每个操作进行同步。...使用 open 函数打开文件,使用 O_WRONLY 标志表示以只写方式打开文件,O_CREAT 标志表示如果文件不存在则创建,O_TRUNC 标志表示如果文件存在则将其截断为空文件,最后一个参数 S_IRUSR...这样做可以提高代码可读性可靠性,并确保在后续修改时代码行为符合预期。此外,释放不再需要文件描述符可以有效地管理有限系统资源。

7500

Linux编程--文件操作

如果在flags中存在O_CREAT标志位,则当文件不存在,会创建文件,并且根据mode参数来决定该文件访问权限 参数: pathname:文件路径 flags:打开方式掩码 mode:创建文件访问权限...O_WRONLY 以只写方式打开文件 此三种读写类型只能有一种 O_RDWR 以读方式打开文件 此三种读写类型只能有一种 O_CREAT 打开文件,如果文件不存在则创建文件 创建文件时会使用Mode...RD,WR,RDWR,只要打开就会把文件清空 O_APPEND 强制write()从文件尾开始care当前文件偏移量所处位置,只会在文件末尾开始添加 如果不使用的话,只会在文件偏移量处开始覆盖原有内容写文件...open中mode 下面三组Mode代表着创建文件文件权限,它们umask共同组成了这个文件权限。以|分隔开分别是User/Group/Other三个组对应权限掩码。...3.当使用了O_APPEND标志位,那么在写时候,文件指针强制在末尾开始写。 ?

1.5K20

【Linux】基础IO ——文件(上)

,把字符串信息自定义格式化到字符串缓冲区中,并规定大小 ---- 将msg中数据打印到buffer字符串中,同时使用fputs将buffer中数据写入刚刚打开文件log.txt中 追加方式——...(选项问题后面会提) 如果打开成功了,就会返回新文件描述符,如果打开失败,返回 -1 操作系统是如何让用户给自己传递标志 1....two three four运行结果 ---- 类比上述 open第二个参数flag ,存在多个标志位,同通过宏来实现,每一个标志位都代表不同值 新创建文件权限不正确 ---- O_CREAT...但是输入是666 ,显示却是664,即other没有写权限 因为创建一个文件,默认权限受到umask影响 解决 umask权限 使用 man 2 umask 查看 #include #include mode_t umask(mode_t mask); 可以影响当前进程启动,属于自己umask,采取就近原则,因为自己设置离更近所以使用自己设置

70610

Linux文件系统

一、Linux文件系统 1.创建 int creat(const char *filename,mode_t mode) 参数mode是存储文件权限 2.打开 int open(const char*...pathname,int flag) int open(const char*pathname,int flag,mode_t mode) flag文件打开标志: O_RDONLY:以只读形式打开文件...O_WRONLY:以只写方式打开文件 O_RDWR:以读写方式打开文件 O_APPEND:以追加方式打开文件 O_CREAT:创建一个文件 O_EXEC:如果使用O_CREAT而且文件已经存在,就会发生一个错误...O_NOBLOCK:以非阻塞方式打开一个文件 O_TRUNC:如果文件已经存在,则删除文件内容 如果使用O_CREAT标志,则使用函数是int open(const char*pathname,...int flag,mode_t mode),这个时候要指定mode标志,用来表示文件访问权限。

6.7K50

【Linux】 拿下 系统 基础文件操作!!!

基础IO篇章我们将讲解以下内容: 复习C文件IO相关操作 认识文件相关系统调用接口 认识文件描述符,理解重定向 对比fdFILE,理解系统调用库函数关系 理解文件系统中inode概念 认识软硬链接...当我们使用完文件之后一定一定要关闭文件:fclose(fp) 我们要进行文件操作,前提是我们程序跑起来了!文件打开关闭,是CPU在执行我们程序。..., int flags, mode_t mode); 第一个参数C语言fopen第一个参数一致(表示文件路径或当前目录文件名) 第二个参数表示想怎样打开文件,传入标志位 第三个参数表示创建文件权限...常用标志位参数: O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR : 读,写打开 上面三个常量,必须指定一个且只能指定一个 O_CREAT : 若文件不存在,则创建它。...所以语言层文件操作函数,本质底层是对系统调用封装!通过不同标志封装来体现w r a+等不同打开类型! 我们在使用文件操作,一般都要使用语言层系统调用,来保证代码可移植性。

8000

linux mmap

mmap是linux中提高文件读写效率一种手段,这里简单整理一下mmap原理使用。 高速页缓存 在介绍文件读写之前需要先了解下页缓存机制,有助于理解文件读写底层实现。...该标志为可以是PROT_NONE或其他一个或多个权限或,该权限不能与打开文件权限冲突。 flags:标志位,用来决定了缓存行为策略。...主要使用标志位就是MAP_PRIVATEMAP_SHARED。若使用MAP_PRIVATE,则表示每个调用mmap进程独有一块缓存(写复制),对该内存更新不会写入文件。...若使用MAP_SHARED,则表示所有相关进程共享一份缓存(可用作共享内存),同时对缓存更新会周期性写入文件。 fd:打开文件描述符,mmap函数返回后可以直接把文件关闭,不会影响内存映射。...可以通过MAP_POPULATE标志位来强制mmap做预读(read-ahead),提前分配好缓存,有助于减少后面访问数据页错误导致阻塞。

2.2K30

文件io之——openclose

(虽然在只指定O_CREAT一个也可以,但应该遵守这个规则更好) * O_RDONLY 只读打开 * O_WRONLY 只写打开 * O_RDWR 可读可写打开 以下可选项可以同时指定0个或多个,必选项按位或起来作为...可选项有很多, 这里只介绍一部分,其它选项可参考open(2)Man Page: * O_APPEND 表示追加。如果文件已有内容,这次打开文件所写数据附加到文件末尾 而覆盖原来内容。...* O_CREAT 若此文件不存在则创建它。使用此选项需要提供第三个参数mode,表示该 文件访问权限。 * O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。...需要说明是,当一个进程终止,内核对该进程所有 尚未关闭文件描述符调用close关闭,所以即使用户程序不调用close,在终止内核也会 自动关闭它打开所有文件。...由open返回文件描述符一定是该进程尚未使用最小描述符。由于程序启动自动打 开文件描述符0、1、2,因此第一次调用open打开文件通常会返回描述符3,再调用open就会 返回4。

39310

【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

在磁盘上文件可以分为两类,一类是被打开文件,一类是未被打开文件。 8.所以,文件操作本质就是进程打开文件关系。...第一个参数就是文件名字,第二个参数flags是指打开文件方式,例如O_RDONLY,O_WRONLY,O_RDWR,O_CREAT,O_APPEND等宏,都可以在调用open作为参数进行传参。...所以C语言中打开文件使用打开方式为w,在底层open接口中,要用三个宏参数O_WRONLY,O_CREAT,O_TRUNC来实现。...通过文件描述符就可以找到对应打开文件。 操作系统通过这些内核数据结构,将被打开文件进程联系起来。...在给子进程拷贝,子进程继承了父进程文件描述符表,但文件控制块是不需要继承,因为文件控制块属于文件系统部分,而你子进程或父进程这些东西是属于进程管理部分,这属于两个领域知识,是沾边

1.1K30

PHP中DirectIO直操作文件扩展使用

今天我们先学习是一个很少人使用过,甚至很多人根本不知道扩展,它与我们日常文件操作有些许不同。不过这些差别并不是我们肉眼所能直观看到,主要还是在于业务需求与性能平衡。...f 系列函数类似,我们需要使用一个 dio_open() 函数来打开一个文件,O_RDWR | O_CREAT 参数意思是打开一个可读写文件,并且如果文件不存在的话,创建它。...c 函数库中 fcntl 函数,目的是对文件描述符执行指定一些操作,这个操作也是以一些常量进行固定,在这里我们使用是 F_SETFL ,它意思是将文件描述符标志设置为指定值,这个 O_SYNC...当然,这个函数还可以设置很多别的操作符,大家可以参考 PHP 官方文档进行深入学习。 dio_tcsetattr() 用于设置打开文件终端属性波特率。...在文章开头介绍中我们已经说明了直接操作文件与普通文件操作一些区别,在自缓存应用或者需要传输非常大数据,直接操作对于 CPU 内存 更加地友好。

64410

POSIX消息队列

消息队列管道FIFO有很大区别,主要有以下两点: 一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息到达,而管道FIFO是相反,进程向其中写消息,管道FIFO必需已经打开来读...IPC持续性不同。管道FIFO是随进程持续性,当管道FIFO最后一次关闭发生,仍在管道FIFO中数据会被丢弃。...name:表示消息队列名字,它符合POSIX IPC名字规则。 oflag:表示打开方式,open函数类似。...mode:是一个可选参数,在oflag中含有O_CREAT标志且消息队列不存在,才需要提供该参数。表示默认访问权限。可以参考open。...attr:也是一个可选参数,在oflag中含有O_CREAT标志且消息队列不存在才需要。该参数用于给新队列设定某些属性,如果是空指针,那么就采用默认属性。

2.9K10

【Linux】基础IO——系统文件IO&fd&重定向&理解

下面,我们要说就是使用比特位来传递选项,一个比特位一个选项,比特位位置不能重复: 通过|传递参数,这样就能传递多个标志位了。...也要使用mode选项,来指明此时新文件权限。 注意:O_CREAT是一个建议选项,文件存在还是不存在都可以使用 1.我们发现了open并没有去帮我们自动创建文件。...我们默认情况下目录以777,普通文件以666开始,**这些都是通过open第三个参数mode选项设置权限,设定创建默认文件权限 使用mode选项设置权限,我们一起来看一看: 我们可以设置unmask...读文件前提是文件已经是存在了,涉及创建和权限问题。...: 我们所谓关闭文件只是在表明用户给OS说已经不需要使用了,由OS决定,OS把引用计数减到0,才被OS真正删除掉。

40820

Linux下Open函数

文章目录 Open 介绍 参数 案例 输出结果: 文件描述符fd Open 介绍  Open函数用来打开一个文件,建立一个文件描述符到文件路径映射,建立文件标识。  ...;O_CREAT—若文件不存在,则创建它。...需要使用mode(文件权限标志)选项,来指明新文件访问权限 ;O_APPEND—追加写 #define O_RDONLY 00 /*只读方式打开*/ #define O_WRONLY...它是一个索引值,指向内核为每一个进程所维护该进程打开文件记录表。当程序打开一个现有文件或者创建一个新文件,内核向进程返回一个文件描述符。...0,1,2对应物理设备一一般是:键盘,显示器,显示器。 所以通常当我们成功打开文件,返回fd都是从3起。

3.1K10

Linux系统编程:基本IO系统调用

参数还可以与下面的值进行按位或运算,修改打开文件行为打开方式 描述 O_APPEND 写入所有数据将被追加到文件末尾 O_CREAT 打开文件,如果文件不存在则建立文件 O_EXCL 如果已经设置了...O_CREAT且文件存在,则强制open()失败,只能与O_CREAT搭配使用 O_TRUNC 如果文件存在,且是普通文件,并且有写权限,将文件内容清空 O_NONBLOCK 文件以非阻塞模式打开,请见...mode参数用户文件创建掩码(umask)执行按位与操作得到。...umask是进程级属性,通过调用umask()函数来修改,支持用户修改新创建文件目录权限。...("file.txt,0644"); /*两个语句作用完全等价*/ 由于选项O_WRONLY|O_CREAT|O_TRUNC组合经常使用,因而系统调用专门使用creat函数来提供这个功能。

3K30

POSIX共享内存

其他IPC不同是,共享内存使用需要用户自己进行同步操作。...MAP_FIXED:该标志表示准确解释start参数,一般建议使用标志,对于可移植代码,应该把start参数置为NULL,且不指定MAP_FIXED标志。...POSIX共享内存使用方法有以下两个步骤: 通过shm_open创建或打开一个POSIX共享内存对象 然后调用mmap将它映射到当前进程地址空间 通过内存映射文件进行通信使用上差别在于mmap描述符参数获取方式不一样...oflag:操作标志,包含:O_RDONLY,O_RDWR,O_CREAT,O_EXCL,O_TRUNC。其中O_RDONLYO_RDWR标志必须且仅能存在一项。...open以及其他POSIX IPCxxx_open函数不同是,该参数必须一直存在,如果oflag参数中没有O_CREAT标志,该位可以置0; shm_unlink用于删除一个共享内存区对象,跟其他文件

2.8K10
领券