文件IO及部分基本IO函数

文章详细介绍了Linux系统中的文件描述符,包括其性质和限制。接着讨论了基本的文件I/O函数,如open()用于打开文件,read()和write()分别用于读写文件,以及lseek()调整文件偏移量。此外,还涉及了文件共享机制下的进程表、文件表和v节点表的关系。最后提到了文件重定向功能,如dup()和dup2()函数的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、文件描述符

二、基本IO函数

三、文件共享

四、文件重定向


一、文件描述符

        文件IO中已打开文件的标志

        非负整数

        当前可用最小作为打开文件的描述符

        默认一个进程同时最多打开1024个描述符(0 ~ 1023)

二、基本IO函数

        1、打开文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

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

                pathname:打开路径

                flags:打开模式      C语言open()函数:打开文件函数

                mode:若打开的文件不存在并创建时,mode赋予新文件权限,mode的值会受到umask值的影响         【umask】关于umask值及其对应的文件权限

                返回值:文件描述符


        2、读取文件

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

                fd:文件描述符

                buf:读到的数据存放的地址

                const:要读取的字节数

                返回值:读取成功返回读到的字节数,读取失败返回-1,若已经读到了文件末尾,则返回0


        3、写文件

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

               fd:文件描述符

                buf:要写入的数据的地址

                const:写入的字节数

                返回值:顺利写入返回写入的字节数,错误返回-1.错误代码存入error中


        4、改变文件偏移量

                每一个打开的文件都有一个与之相关的文件偏移量,第一次打开时默认在文件头,读、写操作都从当前文件偏移量处开始。

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fd, off_t offset, int whence);

               fd:文件描述符

                offset:相对于whence(基准)的偏移量

                whence:SEEK_SET(文件指针开始),SEEK_CUR(文件指针当前位置) ,SEEK_END(文件指针末尾)


        5、关闭文件

#include <unistd.h>

int close(int fd);

                fd:文件描述符

三、文件共享

        文件共享指的是多个进程同时对同一个文件进行操作,此时我们需要了解三张表结构

进程表项每一个进程拥有一张进程表项,主要包含fd标志和文件表指针
文件表每打开一次就会建立一个文件表结构,主要包含文件偏移量,打开方式和v节点表指针
v节点表每一个文件对应一张v结点表,主要包含文件的属性和内核io操作函数地址

四、文件重定向

        在默认情况下,0、1、2号文件描述符分别对应 标准输入、标准输出、标准错误输出

#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);

oldfd:需要重定向的文件的文件描述符

newfd:新的文件描述符

1、dup:. 使用当前可用文件描述符中最小的作为oldfd复制

2、dup2:使newfd作为oldfd的复制,如果newfd已占用,首先会关闭newfd文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值