没有合适的资源?快使用搜索试试~ 我知道了~
Linux C | Linux标准I/O编程
需积分: 9 3 下载量 5 浏览量
2022-09-10
08:54:55
上传
评论
收藏 331KB PDF 举报
温馨提示
试读
14页
操作系统基本上都支持多任务,即同时可以运行多个程序。如果允许程序直接访问系统资源,肯定会带来很多问题。 因此,所有软硬件资源的管理和分配都由操作系统负责。程序要获取资源(如内存分配、读写串口)必须通过操作系统来完成,及用户向操作系统发出服务请求,操作系统收到请求后执行相关的代码来处理。 linux系统调用按照功能大致可分为进程控制、进程间通信、文件系统控制、存储管理、网络管理、套接字控制、用户管理等几类。 ———————————————— 版权声明:本文为CSDN博主「透明水晶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/I_feige/article/details/126791507
资源推荐
资源详情
资源评论
1. Linux 标准I/O 编程
1.1 linux 系统调用和用户编程接口
1.1.1 系统调用
操作系统基本上都支持多任务,即同时可以运行多个程序。如果允许程序直接访问系统资源,肯定
会带来很多问题。
因此,所有软硬件资源的管理和分配都由操作系统负责。程序要获取资源(如内存分配、读写串
口)必须通过操作系统来完成,及用户向操作系统发出服务请求,操作系统收到请求后执行相关的
代码来处理。
linux 系统调用按照功能大致可分为进程控制、进程间通信、文件系统控制、存储管理、网络管
理、套接字控制、用户管理等几类。
1.1.2 用户编程接口
为什么不直接使用系统调用接口?
(1) 系统调用接口功能非常简单,不能满足程序的需求;
(2) 不同操作系统的系统调用接口不兼容,程序移植时工作量大。
1.2 linux 标准 I/O 概述
1.2.1 标准I/O的由来
标准 I/O 指的是 ANSI C 中定义的用于 I/O 操作的一系列函数。
只要操作系统中安装了 C 库,标准 I/O 函数就可以调用。换句话说,如果程序中使用的是标准
I/O 函数,那么源代码不需要修改就可以在其他操作系统下编译运行,具有更好的可移植性。
除此之外,使用标准 I/O 可以减少系统调用的次数,提高系统效率。标准 I/O 函数在执行时也会
用到系统调用。在执行系统调用时, Linux 必须从用户态切换到内核态,处理相应的请求,然后
再返回到用户态。如果频繁的执行系统调用会增加系统的开销。为了避免这种情况,标准 I/O 使
用时在用户空间创建缓冲区,读写时先操作缓冲区,在合适的时机再通过系统调用访问实际的文
件,从而减少了使用系统调用的次数。
1.2.2 流的含义
标准 I/O 的核心对象就是流。当用标准 I/O 打开一个文件时,就会创建一个 FILE 结构体描述该文
件(或者理解为创建一个 FILE 结构体和实际打开的文件关联起来)。我们把这个 FILE 结构体形
象的称为流。标准 I/O 函数都基于流进行各种操作。
标准 I/O 中流的缓冲类型有以下三种:
(1)全缓冲:;
(2)行缓冲:;
(3)无缓冲:;
所需头文件 #include <stdio.h>
函数原型 FILE *fopen(const char *path, const char *mode);
函数参数 path :包含要打开的文件路径及文件名; mode :文件打开方式
函数返回值 成功:指向 FILE 的指针;失败: NULL
1.3 标准 I/O 编程
1.3.1 流的打开
fopen 函数语法要点:
mode 的取值说明:
更多说明,详见:[fly@fly-vm 01-linuxStdIO]$ man fopen
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
r Open text file for reading. The stream is positioned at the beginning of
the file.// 打开只读文件,该文件必须存在
r+ Open for reading and writing. The stream is positioned at the beginning
of the file.// 打开可读写文件,该文件必须存在
w Truncate file to zero length or create text file for writing. The stream
is positioned at the beginning of the file.// 打开只写文件,若文件存在则文件长度为0,即
会擦除写文件以前的内容;若文件不存在则建立文件
w+ Open for reading and writing. The file is created if it does not exist,
otherwise it is truncated. The stream is positioned at the beginning of the
file.// 打开可读写文件,若文件存在则文件长度为0,即会擦除写文件以前的内容;若文件不存在则建立文
件
a Open for appending (writing at end of file). The file is created if it
does not exist. The stream is positioned at the end of the file.//以附加的方式打开
只写文件
a+ Open for reading and appending (writing at end of file). The file is
created if it does not exist. The initial file position for reading is at the
beginning of the file, but output is always appended to the end of the file.//以
附加的方式打开可读写的文件
1.3.2 流的关闭
说明:函数返回值,成功返回 0 ,失败返回 EOF ;
该函数将流的缓冲区内的数据全部写入文件中,并释放相关资源。
1.3.3 错误处理
示例:
#include <stdio.h>
int fclose(FILE *stream);
#include <stdio.h>
void perror(const char *s);
#include <errno.h>
const char * const sys_errlist[];
int sys_nerr;
int errno; /* Not really declared this way; see errno(3) */
/*******************************************************************
* > File Name: perror.c
* > Author: fly
* > Create Time: 2022年09月06日 星期二 23时13分12秒
******************************************************************/
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE *fp;
if((fp = fopen("test.txt", "r")) == NULL)
{
perror("file to open");
return (-1);
}
fclose(fp);
return 0;
}
剩余13页未读,继续阅读
资源评论
透明水晶
- 粉丝: 3514
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功