`
yuanlanjun
  • 浏览: 1181110 次
文章分类
社区版块
存档分类
最新评论

Linux 文件IO函数(open/close/read/write/lseek)

 
阅读更多
文件描述符,非负整数。当为负数时(通常是-1),代表打开/创建文件出错。
其中文件描述默认值如下:
/* Standard file descriptors. */
#define STDIN_FILENO0/* Standard input. */
#define STDOUT_FILENO1/* Standard output. */
#define STDERR_FILENO2/* Standard error output. */

文件IO函数,通常包括 open,read,write,lseek,close这五个函数。
还有creat函数,但是现在用open已经可以完全替代creat。
creat = open + oflag(O_WRONLY|O_CREAT|O_TRUNC)


int open(const char *pathname , int oflag, mode_t mode);//其中mode_t 是unsigned int类型
打开pathname文件
其中oflag的组成:第一组必选其一,第二组任选[0-n]个。
第一组:文件的打开方式
O_RDONLY //只读
O_WRONLY //只写
O_RDWR //读写
第二组:其他选项
O_APPEND //将当前偏移量指向文件末尾,否则初始值为0
O_CREAT
O_EXCL
O_TRUNC
O_NOCTTY
O_NONBLOCK
O_DSYNC
O_RSYNC
O_SYNC

int close(int filedes);

关闭指定文件


off_t lseek(int filedes, off_t offset, int whence);
修改文件当前指针偏移量,成功返回执行完成后新的文件偏移量,失败返回-1;
whence取值如下:
SEEK_SET:从文件开始处(偏移量为0处);
SEEK_CUR:从当前偏移量处;
SEEK_END:从文件结尾处;
因此类似ftell函数的功能(获取当前偏移量)可以用lseek(fd, 0, SEEK_CUR);实现。

ssize_t read (int fd, void *buf, size_t nbytes);
读取描述符fd所指向文件,读取到的内容存放到buf中,读取nbytes字节。


ssize_t write (int fd, const void *buf, size_t nbytes);
向描述符fd所指向文件写入从buf中读取的数据,共写入nbytes字节。


返回值汇总:
open,成功返回非负数文件描述符,失败返回-1;
close,成功返回0,失败返回-1;
lseek,成功返回执行完成后新的文件偏移量,失败返回-1;
read,成功返回读取到的字节数,失败返回-1;
write,成功返回成功写入字节数,失败返回-1;

其他:
关闭一个文件时,还会释放该进程加在该文件上的所有记录锁。
当一个进程终止时,内核自动关闭它所有打开的文件。


分享到:
评论

相关推荐

    电子科技大学linux环境编程作业2——李林——编写带缓存的文件操作类

    需要提供open/read/write/lseek/close等函数的封装函数 该类要提供数据缓存服务。 调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件中。 调用该类的读操作接口时,该类能根据策略缓存读出的数据...

    Linux环境高级编程实验2

    需要提供 open/read/write/lseek/close 等函数的封装函数 该类要提供数据缓存服务。 调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件 中。 调用该类的读操作接口时,该类能根据策略缓存读出的...

    编写带缓存的文件操作类

    需要提供open/read/write/lseek/close等函数的封装函数 该类要提供数据缓存服务。 调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件中。 调用该类的读操作接口时,该类能根据策略缓存读出的数据...

    Linux应用编程之lseek详解

    Linux应用编程之lseek详解 ...write和read函数本身自带移动文件指针的功能,所以我们write了n个字节后,文件指针会自动向后移动n位。如果需要人为的随意更改文件指针,那就只能通过lseek函数了。 (5)、

    Linux lseek函数的使用详解

    主要介绍了Linux lseek函数的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    linux 文件I/O编程

    这里包含文件操作的一些用法,比如open read write lseek close 还有对文件添加读取锁和写入锁的一些内容

    linux_C函数库中文手册

    相关函数 readdir, write, fcntl, close, lseek, readlink, fread 头文件 #include 定义函数 ssize_t read(int fd, void * buf, size_t count); 函数说明 read()会把参数fd 所指的文件传送count 个字节到buf 指针所...

    Linux 2.6.11内核文件IO系统调用详解

    本文主要讲述的是文件I/O操作的2.6.11内核版本实现,包括了主要的数据结构、宏定义和函数流程。分别讲述open,create,close,read,write,lseek系统调用。

    操作系统期末复习资料

    掌握系统I/O库的使用:read/write/open/lseek/close,能分析程序案例 内核文件I/O数据结构,文件打开过程、文件关闭过程 dup和I/O重定向原理(案例分析) 文件逻辑地址、物理地址的概念 文件创建过程 一体化...

    《Linux系统编程、网络编程》第1章:文件IO

    课程内容:什么是API,OS API与库API,open函数,read/write/close函数,lseek函数,进程表和文件描述符表,对文件进行共享操作,dup/dup2函数,fcntl函数

    C++实现的Linux Ext2的用户级文件系统.zip

    实现系统调用 creat open read write lseek(seek) close mkdir 及其它 能够将文件写入虚拟磁盘,并可完好无损地取出。 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125644551

    APUE(UNIX环境高级编程)——文件I/O篇

    本章开始讨论UNIX系统,先说明可用的文件I/O函数——打开文件、读文件、写文件等等。...然后说明不同缓存器长度对read和write函数的影响。本章所说明的函数经常被称之为不带缓存的I/O(与标准I/O 函数相对照

    qt-faststart:移动文件顶部的“moov”原子并通过添加适当的偏移量更新所有“stco”子原子指针

    与ffmpeg的源代码不同的是: 它使用fcntl.h open/close/lseek/read 而不是 flose/fopen/fseeko/ftello。 它就地读取/修改/写入 mp4 文件,而不是将输出写入另一个文件。 它将被合并到nginx_http_mp4_module ,以便...

    基于c++(MINIX1.0)的控制台实现文件管理系统【100010275】

    本项目是基于MINIX1.0 的文件管理... 基于c++的控制台,实现了linux的基本文件操作命令,包括ls,cd,mkdir,rm,vi等等命令,同时提供基本文件接口,包括sys_open,sys_close,sys_read,sys_write,sys_lseek等系统调用。

    linux网络编程-宋敬彬-part1

    3.2.2 打开创建文件open()、create()函数 72 3.2.3 关闭文件close()函数 76 3.2.4 读取文件read()函数 77 3.2.5 写文件write()函数 79 3.2.6 文件偏移lseek()函数 80 3.2.7 获得文件状态fstat()函数 83 ...

    linux网络编程-宋敬彬-part3

    3.2.2 打开创建文件open()、create()函数 72 3.2.3 关闭文件close()函数 76 3.2.4 读取文件read()函数 77 3.2.5 写文件write()函数 79 3.2.6 文件偏移lseek()函数 80 3.2.7 获得文件状态fstat()函数 83 ...

    linux网络编程-宋敬彬-part2

    3.2.2 打开创建文件open()、create()函数 72 3.2.3 关闭文件close()函数 76 3.2.4 读取文件read()函数 77 3.2.5 写文件write()函数 79 3.2.6 文件偏移lseek()函数 80 3.2.7 获得文件状态fstat()函数 83 ...

    FatFs的API函数中文介绍

    f_open - 打开/创建一个文件f_close - 关闭一个文件 f_read - 读文件f_write - 写文件 f_lseek - 移动文件读/写指针 f_truncate - 截断文件 f_sync - 冲洗缓冲数据 Flush Cached Data f_opendir - 打开一个目录 f_...

    Linux C 一站式学习

    3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap 29. 文件系统 1. 引言 2. ext2文件系统 2.1. 总体存储布局 2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作的系统函数 3. VFS 3.1. 内核数据...

Global site tag (gtag.js) - Google Analytics