嵌入式系统中文件的操作

上传人:自*** 文档编号:48468790 上传时间:2018-07-15 格式:PPT 页数:29 大小:508.10KB
返回 下载 相关 举报
嵌入式系统中文件的操作_第1页
第1页 / 共29页
嵌入式系统中文件的操作_第2页
第2页 / 共29页
嵌入式系统中文件的操作_第3页
第3页 / 共29页
嵌入式系统中文件的操作_第4页
第4页 / 共29页
嵌入式系统中文件的操作_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《嵌入式系统中文件的操作》由会员分享,可在线阅读,更多相关《嵌入式系统中文件的操作(29页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统嵌入式系统中中文件的操作文件的操作专业:模式识别与智能控制系统 学号:1306039 姓名:冯宇谦内容文件的概念系统调用的文件操作库函数的文件操作(1) 文件的概念 1 1、文件文件 文件是对系统资源的一个抽象,是对系统资源进行访问文件是对系统资源的一个抽象,是对系统资源进行访问 的一个通用接口,诸如内存、硬盘、一般设备及进程间的一个通用接口,诸如内存、硬盘、一般设备及进程间 通信的通道。通信的通道。在在LinuxLinux系统上,一切接文件,文件无所不在。系统上,一切接文件,文件无所不在。 2 2、文件类型文件类型 普通文件、目录文件、设备文件、链接文件、管道文件普通文件、目录文件

2、、设备文件、链接文件、管道文件 、socketsocket 3 3、文件描述符文件描述符 文件描述符是应用程序中表示被打开文件的一个整数,文件描述符是应用程序中表示被打开文件的一个整数, 其他对文件的操作接口都要使用这个整数来指定所操作其他对文件的操作接口都要使用这个整数来指定所操作 的文件的文件(2)系统调用的文件操作 即底层操作,是实现文件操作最直接的方式函数作用 open打开或创建文件 close关闭文件read从指定的文件描述符中读出的数据放到缓冲区中 ,并返回实际读出的字节数。 write把指定缓冲区的数据写入指定的文件描述符中, 并返回实际写入的字节数。 ioctl向文件传递控制信

3、息或发出控制命令open函数语法需要的头文件:#include #include #include 函数原型: int open(const char* pathname, int flags); int open(const char* pathname, int flags, mode_t mode); 参数说明: pathname:被打开的文件名(包括路径名); flags:文件打开方式,有以下取值: O_RDONLY:只读 O_WRONLY:可写 O_RDWR:读写 这几个标志指定打开方式,她们之间是互斥的,不能同时使用 ,但可以与下面的标志用按位或的方式组合起来使用open函数语法O

4、_APPEND 追加方式打开文件,每次写时都写在文件末尾。 O_CREAT 如果文件不存在,则创建一个,存在则打开它。 O_EXCL 与O_CREAT一起使用时,如果文件已经存在则 返回出错。 O_TRUNC 以只写或读写方式打开时,把文件截断为0 O_DSYNC 每次write时,等待数据写到磁盘上。 O_RSYNC 每次读时,等待相同部分先写到磁盘上。 O_SYNC 每次write时,等到数据写到磁盘上并接更新文 件属性。open函数语法mode:指定新文件的权限,常用取值如下: S_IRWXUGO 可读 可写 可执行S_IRUSR GRP OTH 可读S_IWUSR GRP OTH 可写

5、S_IXUSR GRP OTH 可执行S_ISUID 设置用户IDS_ISGID 设置组ID 这些值可以按位或的方式组合使用 返回值:成功返回文件描述符;失败返回-1close函数语法需要的头文件: #include 函数原型: int close(int fd); 函数参数: fd 文件描述符 函数返回值 0 成功 -1 出错read函数语法需要的头文件: #include 函数原型: ssize_t read(int fd, void *buf, size_t count); 函数参数: fd 文件描述符 buf 存储内容的内存空间(指定存储读出数据的缓冲区 ) count 读取的字节数

6、函数返回值 0 成功读取的字节数 函数原型: ssize_t write(int fd, void *buf, size_t count); 函数参数: fd 文件描述符 buf 需要写入内容的内存空间(缓冲区的指针) count 写入的字节数 函数返回值 0 成功写入的字节数 函数原型: Int ioctl (int fd,int request,) 函数参数: fd 文件描述符 request 代表要进行的操作,不同的文件有不同 的定义 可变参数 取决于request参数,通常是一个指向 变量或结构体的指针。 函数返回值 成功返回0,有些ioctl返回其他非负值,错误返回-1(3)库函数的

7、文件操作 C标准库提供了文件的标准I/O函数库,相比系统调用, 主要差别是实现跨平台的用户态缓冲的解决方案 举例:当使用printf输出多个字符时,缩写字符放在一个 缓冲区,直到遇见换行系统才调用write函数将数据输出 。 好处:提高I/O操作效率。系统调用要请求内核服务,会 引来cpu模式的切换,期间大量的堆栈数据保存操作, 开销较大,频繁系统调用会降低运行效率,有了缓冲机 制,多个读写操作合并为一,大大提高程序运行效率。 由此可知,I/O函数实际上是对底层系统调用的保障,最 终读写操作人需要调用系统函数完成。(3)库函数的文件操作概念: 文件指针:库函数并不直接操作文件的描述符,而是 使

8、用文件指针。文件指针与文件描述符是一一对应关 系,文件指针的数据类型为FILE型。 流:自标准I/O中,一个打开的文件称为流。I/O库函数应用程序系统调用Open close Read write .fopen fread fwrite fclose .(3)库函数的文件操作 标准I/O操作是基于流缓冲的,是符合ANSI C的标准I/O 处理。比如:printf()、scanf()函数等。 带缓冲的I/O操作是在内存中开辟一个“缓冲区”,为程 序中的每一个文件使用。当执行读文件的操作时,从磁 盘文件中将数据先读入内存“缓冲区”,装满后再从内存 “缓冲区”依次读入接收的数据。函数作用 fopen

9、打开或创建文件 fclose关闭文件fread从文件中读取一个字节。 fwrite将数据成块写入文件流。带缓存的I/O操作函数作用fseek移动文件流的读写位置。ftell查询文件流当前的读写位置。rewind 把文件的读写位置设置在文件头。fgetc从文本文件中读取一个字符。fputc向文本文件中写入一个字符。fgets从文本文件中读取一个字符串(一行数据,以n结尾)fputs向文本文件中写入一个字符串。fopen函数语法需要的头文件: #include 函数原型: FILE * fopen(const char* path, const char * mode); 参数说明: path:带

10、文件路径的文件名 mode:文件打开状态。 返回值: 成功返回指向FILE的文件指针(文件句柄); 失败返回NULLfopen函数的参数mode取值参数作用 r打开只读文件,文件必须存在。r+打开可读写文件,文件必须存在。w打开只写文件,若文件存在则清除内容,不存在则 新建该文件。 w+打开可读写文件,若文件存在则清除内容,不存在 则新建该文件。 a以附加方式打开只写文件,若文件不存在则建立该 文件;若存在则写入的数据被加到文件尾。 a+以附加方式打开可读写文件,若文件不存在则建立 该文件;若存在则写入的数据被加到文件尾。 上面的可以加上一个b,如rb、w+b、ab+等,b表示打开的 二进制文

11、件,而不是纯文本文件。fclose函数语法需要的头文件: #include 函数原型: int fclose(FILE * stream); 参数说明: stream:文件句柄。 返回值: 成功返回0; 出错返回EOFfread函数语法需要的头文件: #include 函数原型: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 参数说明: ptr: 指向一块块存储储空间间,用来存放本次读读取到的数据 size: 读取文件一条记录的字节数大小 nmemb: 本次读取文件记录的数目 stream: 将要读取的文件流

12、句柄 返回值: 成功返回实际读取到的nmemb数目 出错返回EOFfwrite函数语法需要的头文件: #include 函数原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 参数说明: ptr: 需写入的数据地址 size: 写入文件一条记录的字节数大小 nmemb: 写入文件记录的数目 stream: 将要写入数据的文件流句柄 返回值: 成功返回实际写入到的nmemb数目 出错返回EOFfseek函数语法需要的头文件: #include 函数原型: int fseek(FILE *stre

13、am, long offset, int whence); 参数说明: stream:文件句柄 offset:偏移量(可正可负) whence:SEEK_SET 文件开头+offset为新读写位置SEEK_CUR 目前读写位置+offset为新位置SEEK_END 文件结尾+offset为新位置 返回值: 成功返回0 出错返回-1ftell函数语法需要的头文件: #include 函数原型: int ftell(FILE *stream); 参数说明: stream:文件句柄 返回值: 0:文件流当前操作位置相对于文件头的偏移量 函数原型: void rewind(FILE *stream);

14、 参数说明: stream:文件句柄 返回值: 无 函数说明: 把文件指针位置设置为0,即把文件指针设置到文件的起 始位置。fgetc函数语法需要的头文件: #include 函数原型: int fgetc(FILE *stream); 参数说明: stream:文件句柄 返回值: 0:成功读取字符内容 EOF:出错 函数说明: 从文件中读取一个字符。fputc函数语法需要的头文件: #include 函数原型: int fputc(int ch, FILE *stream); 参数说明: ch:需要写入文件的字符内容 stream:文件句柄 返回值: 0:成功写入的字符值 EOF:出错 函数

15、说明: 向文件中写入一个字符。fgets函数语法需要的头文件: #include 函数原型: char * fgets(char *s, int n, FILE *stream); 参数说明: s:读取字符串的存储内存指针 n:读取字符串内存的大小 stream:文件句柄 返回值: 非空:成功 NULL:出错 函数说明: 从文件中读取一行字符串。fputs函数语法需要的头文件: #include 函数原型: int fputs(char *string, FILE *stream); 参数说明: string:需要写入文件的字符串内容 stream:文件句柄 返回值: 0:成功 0:出错 函数说明: 向文件中写入一个字符串。库函数调用对比系统调用结束!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号