linux系统编程文件打开,读,写,文件描述符关闭

文章详细介绍了Linux系统中的文件IO操作,包括七种基本文件类型如普通文件、目录、设备文件等。重点讨论了open函数的不同标志如O_RDONLY、O_WRONLY、O_CREAT等,以及write和read函数的使用,还有close函数在资源管理中的重要性,强调了及时关闭文件描述符以避免资源耗尽的问题。
摘要由CSDN通过智能技术生成

文件IO

七种基本文件类型

真实存在的文件

-:普通文件

d:文件夹

l:软连接 伪文件

c:字符设备

b:块设备

p:管道

s:套接字

注:伪文件的本质是内核中的一块缓冲区文件

文件描述符:默认0-1023

操作系统分配文件描述符的规则:分配一个当前可用最小的

0标准输入 STDIN_FILENO

1标准输出STDOUT_FILENO

2标准错误STDERR_FILENO

Open

函数原型: int open(const cha *pathname,intflags);

参数:

pathname:想要打开的文件路径名

flags:O_RDONLYO_WRONLY O_RDWR 中的一个

返回值:一个新的文件描述符

Int open(const char *pathname,int flags,mode_t mode);

O_RDONLY:以只读权限打开文件

O_WRONLY:以只写权限打开文件

O_RDWR:以读写权限打开文件

要求文件的权限要大于等于文件打开的权限

O_CREAT:只能用于第三个参数的open,当打开的文件不存在的时候创建文件,新创建的文件的权限遵从open的第三个参数mode_t mode,mode是一个三位的八进制数: 0644,解释:0表示八进制,6表示文件的所有者拥有rw-权限,4表示所属组拥有r--权限,4表示其他人拥有r--权限。(注意:最终创建的文件的权限不一定等于mode)(实际得到的文件权限 = mode&~umask)

O_TRUNC: 表示将文件截断为0

O_APPEND: 表示追加

O_EXCL:必须用在三个参数的open,并且必须喝O_CREAT一起用,当指定O_CREAT|O_EXCL时,如果open的文件已经存在,open返回-1。

O_XXX宏定义在fcntl.h

O_NONBLOCK:以非阻塞的形式打开文件

write

函数原型:ssize_t write(int fd,constvoid*buf,size_t count);

参数:

fd:目标文件的文件描述符

buf:要写入文件的源数据,一个缓冲区,常传数组

count:要写入的字节数,要求count<=sizeof(buf);

返回值:

写入成功,返回成功写入的字节数

写入失败:返回-1

read

函数原型;ssize_t read(int fd,void*buf,size_count);

参数:

fd;目标文件的文件描述符

buf:一个缓存区,用于存储从文件中读到的数据

count:要读取的字节数,要求count<=sizeof(buf);

返回值:

读取成功辉返回成功读到的字节数

>0 主义read 的返回值<= count

=0 读到了文件的末尾

读取失败 返回-1

close

函数原型: int close(int fd);

参数:fd 要关闭的文件描述符

返回值:成功返回0,失败返回-1

问题:文件描述符为什么需要关闭

1.文件描述符属于有限资源

2.程序执行很短时间不会造成问题,如果程序运行时间比较长,需要持续打开新的文件,如果不用的文件描述符没有释放,最终文件描述符会消耗殆尽,导致无法打开新的文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值