第7课-系统调用方式文件编程

一.核心理论:文件描述符
(1)成年公民有身份证编号
(2)打开的文件对应文件描述符。
(3)实质就是一串数字。
(4)作用就是能够区分所有打开的文件。
二.函数学习
man命令默认是按照Linux系统内置手册顺序查找你要搜索的关键词,一旦找到就不继续查找了。相应的顺序是1命令,2系统调用,3库函数。
2.1 打开文件
2.1.1 函数名
Open
2.1.2 函数原形
(1)int open(const char* pathname,int flags);
(2)int open(const char* pathname,int flags.mode_t mode);
2.1.3 函数功能
打开或者创建一个文件
2.1.4 所属头文件
<sys/types.h>
<sys/stat.h>
<fcntl.h>
2.1.5 返回值
成功 返回文件描述符
失败 返回-1
2.1.6 参数说明
Pathname:要打开的文件名(含路径)
Flags:文件打开以后的权限
(1)必须包含以下三者之一
O_RDONLY,O_WRONLY,O_RDWR
(2)可以外加包含以下选项
O_APPEND,O_CREAT
如果使用O_CREAT选项,则必须使用第三个参数mode。默认是不创建不存在的文件的。默认是覆盖之前存在的文件内容的,所以要指明是否以追加方式打开。
Mode:文件待创建文件的访问权限,前提是要在flags参数里面包含了o_creat标志。格式是:文件所有者 + 文件同组用户 + 其他用户。前面多一个0表示粘连位。
2.2 创建文件
2.1.1 函数名
Creat
2.1.2 函数原形
int creat(const char *pathname, mode_t mode);
2.1.3 函数功能
创建一个文件并且以只写的方式打开它。
如果已经存在则不创建。
2.1.4 所属头文件
<sys/types.h>
<sys/stat.h>
<fcntl.h>
2.1.5 返回值
成功 返回文件描述符
失败 返回-1
2.1.6 参数说明
Pathname:创建的文件名(含路径)
Mode:创建的文件爱你的读写权限
2.3 关闭文件
2.3.1 函数名
Close
2.3.2 函数原形
Int close(int fd);
2.3.3 函数功能
关闭一个打开的文件
2.3.4 所属头文件
<unistd.h>
2.3.5 返回值
成功:0
失败:-1
2.3.6 参数说明
Fd:要关闭的文件的文件描述符。
2.4 读文件
2.4.1 函数名
read
2.4.2 函数原形
ssize_t read(int fd, void *buf, size_t count);
2.4.3 函数功能
从打开的文件中读取指定大小的数据到指定的内存位置。
2.4.4 所属头文件
<unistd.h
2.4.5 返回值
成功:返回读取的字节数
失败:返回-1
2.4.6 参数说明
Fd:已经打开且要从该文件读取数据的文件描述符
Buf:存放读取到的数据的起始位置
Count:想要读取的字节数
2.5 写文件
2.5.1 函数名
Write
2.5.2 函数原形
ssize_t write(int fd, const void *buf, size_t count);
2.5.3 函数功能
向已经打开的文件写入预先指定的数据
2.5.4 所属头文件
<unistd.h>
2.5.5 返回值
成功:返回成功写入的字节数
失败:-1
2.5.6 参数说明
Fd:已经打开且要向该文件写入数据的文件描述符
Buf:要写入的数据存放的起始位置
Count:想要写入的字节数
文件操作中有隐形的文件读写指针,打开文件的时候,默认是指向文件头,在写入数据到该打开的文件后,文件读写指针指向了文件尾,当文件还未关闭,就继续读取数据的话,只能读到空数据,因为读和写都是按照文件指针的位置进行的。
2.6 定位文件
2.6.1 函数名
Lseek
2.6.2 函数原形
off_t lseek(int fd, off_t offset, int whence);
2.6.3 函数功能
将文件读写指针移动到指定位置
2.6.4 所属头文件
<sys/types.h>
<unistd.h>
2.6.5 返回值
成功:返回文件读写指针距离文件头的位置(字节数)
失败:-1
2.6.6 参数说明
fd:要移动指针的文件
Offset:移动的距离(字节数)
Whence:决定指针以什么位置为基准开始移动
SEEK_SET:以文件头为基准,此时的offset只能是整数
SEEK_CUR: 以当前位置为基准,此时的offset可正可负,正数往后移动,负数往前移动。
SEEK_END:以文件尾为基准移动,此时的offset之能是负数。
2.7 复制文件描述符
2.7.1 函数名
Dup
2.7.2 函数原形
int dup(int oldfd);
2.7.3 函数功能
复制一个已存在的文件描述符,但是和老描述符指向同一文件。
2.7.4 所属头文件
<unistd.h>
2.7.5 返回值
成功:返回新的文件描述符
失败:-1
2.7.6 参数说明
Oldfd:要复制的老的文件描述符。
三.复制文件实例

时间: 2024-10-14 10:57:34

第7课-系统调用方式文件编程的相关文章

第8课-库函数方式文件编程

1.基于C函数库的程序是独立于操作系统的,可移植性更好.基于系统调用的编程依赖于内核,移植性不好.2.流:在程序和源文件之间会建立一个数据通道访问文件里的数据,于是通道里的数据就成了抽象动态的流.文件指针:对应于系统调用的文件描述符(整数).是FILE类型的指针,通常是定义一个FILE* fp的变量描述一个指向文件的指针,FILE类型里包含了管理流信息的数据信息.3.函数学习: 3.1 打开文件 Fopen(文件指针默认指向文件头)3.1.2 函数原形FILE *(const char *pat

系统调用方式文件编程-open

通过Linux系统调用函数编写应用程序,该应用程序实现文件的复制功能 文件描述符--在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配. 1.打开文件--open 头文件:#include<sys/types.h>.#include<sys/stat.h>.#include<fcntl.h> 函数原型:int open(const char *pathname,int flags); int open(const char *pathname,int

linux应用开发-系统函数方式文件编程

linux应用开发-系统函数方式文件编程 一 系统调用 指调用系统的函数库 二 文件描述符 性质:一个数字 打开的文件对应一个数字即一个文件描述符 三 常用函数 1 打开文件 open 2 创建文件 creat 3 关闭文件 close 4 读文件 read 5 写文件 write 6 定位文件 lseek 7 复制文件描述符 dup 三 man命令查找顺序 1 命令 man read 2 系统调用函数 man 2 read 3 库函数 四 linux下main函数参数 void main(in

linux应用程序开发-文件编程-系统调用方式

在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧! 文件编程有两种方式,一是系统调用方式,二是库函数调用. 前者依赖特定的平台,后者不依赖平台. 系统调用:创建 int creat(const char *filename,mode_t mode); filename:要创建的文件名 mode:创建模式 S_IR

系统调用操作文件——《Unix/Linux编程实践教程》读书笔记

1.who命令通过读系统日志的内容显示当前已经登录的用户. 2.Unix系统把数据存放在文件中,可以通过以下系统调用操作文件: open(filename, how) creat(filename, mode) read(fd, buffer, amt) write(fd, buffer, amt) lseek(fd, distance, base) close(fd) 3.进程对文件的读/写都要通过文件描述符,文件描述符表示文件和进程之间的连接. 4.每次系统调用都会导致用户模式和内核模式的切

系统调用与模块编程

前言 转载请注明出处http://www.cnblogs.com/dvd0423/p/4183443.html 内核让人最爽的地方就是它给你站在山上看风景的感觉,一切尽收眼底.就像0号博文说的,不管它有没有用,知其所以然总是好的. 这个系列的内容围绕Linux内核展开,涉及的主要是我做KVM的过程中遇到的部分,网络.调度.KVM等等.虽然是底层的东西但是搞应用的人看一看也没有坏处.我们都知道内核太庞大,要想全了解几乎不可能,所以我们只能根据自己的需要去针对性的学习.而如此庞大的项目却能被组织的有

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

多功能电子通讯录(涉及到了双向链表的使用,Linux文件编程等等)

readme.txt //作为一个程序员,我们咋么能不写用户手册呢!MSP的我觉得用户体验是王道,苹果手机的用户体验的确不错!不过WP加油!我去,扯远了!赶紧看我的程序吧!  歡迎使用多功能電子通訊錄V1.0版本        如有BUG敬請原諒     make  之後便可以使用     ./ebook  運行本程序     make clean 清理本程序中間文件     make cleanall 清除所有非源程序文件 PS:我本想直接给大家看代码的,但是在这个过程中,重要不仅仅是代码,首

NeHe OpenGL教程 第三十三课:TGA文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十三课:TGA文件 加载压缩和未压缩的TGA文件: 在这一课里,你将学会如何加载压缩和为压缩的TGA文件,由于它使用RLE压缩,所以非常的简单,你能很快地熟悉它的. 我见过很多人在游戏开发论坛或其它地方询问关于TGA读取的问题.