open函数

     调用o p e n函数可以打开或创建一个文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const charp a *t h n a m e, int o f l a g,.../*, mode_tm o d e * / ) ;


     返回:若成功为文件描述符,若出错为- 1
     我们将第三个参数写为. . .,这是ANSI C说明余下参数的数目和类型可以变化的方法。对于open函数而言,仅当创建新文件时才使用第三个参数。(我们将在稍后对此进行说明。)在函数原型中此参数放置在注释中。 pathname是要打开或创建的文件的名字。oflag参数可用来说明此函数的多个选择项。用下列一个或多个常数进行或运算构成oflag参数(这些常数定义在<fcntl.h>头文件中):
• O_RDONLY 只读打开。
• O_WRONLY 只写打开。
• O_RDWR 读、写打开。


很多实现将ORDONLY定义为0,OWRONLY定义为1,ORDWR定义为2,
以与早期的系统兼容。
在这三个常数中应当只指定一个。下列常数则是可选择的:
• O_APPEND 每次写时都加到文件的尾端。

• O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位

• O_EXCL 如果同时指定了OCREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操。
• O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
• O_NOCTTY 如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。
• O_NONBLOCK 如果pathname指的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。


     较早的系统V版本引入了O N D E L AY(不延迟)标志,它与O N O N B L O C K(不阻塞)选择项类似,但在读操作的返回值中具有两义性。如果不能从管道、F I F O或设备读得数据,则不延迟选择项使r e a d返回0,这与表示已读到文件尾端的返回值0相冲突。S V R 4仍支持这种语义的不延迟选择项,但是新的应用程序应当使用不阻塞选择项以代替之。
• O_SYNC 使每次w r i t e都等到物理I / O操作完成。O S Y N C选择项不是P O S I X . 1的组成部分,但S V R 4支持此选择项。
由o p e n返回的文件描述符一定是最小的未用描述符数字。这一点被很多应用程序用来在标准输入、标准输出或标准出错输出上打开一个新的文件。例如,一个应用程序可以先关闭标准输出(通常是文件描述符1 ),然后打开另一个文件,事先就能了解到该文件一定会在文件描述
符1上打开。在3 . 1 2节说明d u p 2函数时,可以了解到有更好的方法来保证在一个给定的描述符上打开一个文件。


文件名和路径名截短

     如果N A M E M A X是1 4,而我们却试图在当前目录中创建一个其文件名包含1 5个字符的新文件,此时会发生什么呢? 按照传统,早期的系统V版本,允许这种使用方法,但是总是将文件名截短为1 4个字符,而B S D类的系统则返回出错E N A M E TO O L O N G。这一问题不仅仅与创建新文件有关。如果N A M E M A X是1 4,而存在一个其文件名恰恰就是1 4个字符的文件,那么以p a t h n a m e作为其参数的任一函数( o p e n , s t a t等)都会遇到这一问题。
      在P O S I X . 1中,常数_ P O S I X N O T R U N C决定了是否要截短过长的文件名或路径名,或者返回一个出错。

若_ P O S I X N O T R U N C有效,则在整个路径名超过PAT H M A X,或路径名中的任一文件名超过N A M E M A X时,返回出错E N A M E TO O L O N G。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值