第6章 文件IO编程

合集下载

《Python编程基础》课程期末复习资料2023年修改整理

《Python编程基础》课程期末复习资料2023年修改整理

千里之行,始于足下《Python编程基础》课程期末复习资料《Python编程基础》课程期末复习资料《Python编程基础》课程讲稿章节⽬录:第1章、简介及⽰例(4个知识点)01 Python简介02 程序基础和Python编程环境03 HelloWorld程序04 输⼊、输出及IDLE环境介绍第2章、基础语法(17个知识点)01变量的定义02 Number数据类型03 String数据类型04 List数据类型05 Tuple数据类型06 Set数据类型07 Dictionary数据类型08占位运算符和算术运算符09赋值运算符、⽐较运算符和逻辑运算符10位运算符11⾝份运算符和成员运算符12序列运算符和运算符优先级13条件语句概述14条件语句实现和pass15循环语句概述和for循环16 while循环和索引17 break、continue和else第3章、函数(18个知识点)01函数的定义与调⽤02形参和实参求知若饥,虚心若愚。

03默认参数和关键字参数04不定长参数05拆分参数列表06返回值07模块概述和import语句08全局变量__name__和系统模块09 from…import10包11猴⼦补丁和第三⽅模块猎取安装12变量的作⽤域和局部变量13全局变量和global关键字14 nonlocal关键字15递归函数16⾼阶函数和lambda函数17闭包18装饰器第4章、⾯向对象(16个知识点)01⾯向对象概述02类的定义和创建实例03类属性定义及其访问04类中一般⽅法定义及调⽤05私有属性06构造⽅法07析构⽅法08常⽤内置⽅法09继承的概念10⼦类的定义11⽅法重写和鸭⼦类型12 super⽅法千里之行,始于足下13内置函数isinstance、issubclass和type14类⽅法和静态⽅法15动态扩展类与实例和__slots__变量16 @property装饰器第5章、序列、集合和字典(17个知识点)01可变类型与不可变类型02创建列表和拼接列表03复制列表元素04列表元素的查找、插⼊和删除05列表元素的最⼤值、最⼩值、浮现次数和列表长度06列表元素排序07元组的操作08集合的创建和插⼊元素09集合的运算10字典的创建和初始化11字典元素的修改、插⼊和删除12字典的浅拷贝和深拷贝13推断字典中是否存在键及拼接两个字典14字典的其他常⽤操作15切⽚和列表⽣成表达式16⽣成器17迭代器第6章、字符串(14个知识点)01创建字符串和不同引号的区别02字符串⽐较03字符串切割04字符串检索和替换05去除字符串空格和⼤⼩写转换06字符串的其他常⽤操作求知若饥,虚心若愚。

不带缓存的文件IO操作

不带缓存的文件IO操作

不带缓存的文件I/O 操作本节主要介绍不带缓存的文件I/O 操作,主要用到5 个函数:open、read、write、lseek 和close。

这里的不带缓存是指每一个函数都只调用系统中的一个函数。

这些函数虽然不是ANSI C的组成部分,但是是POSIX 的组成部分。

6.3.1 open和close(1)open和close函数说明open函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。

close函数是用于关闭一个打开文件。

当一个进程终止时,它所有已打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。

(2)open和close函数格式open函数的语法格式如表6.1 所示。

表6.1 open函数语法要点所需头文件#include <sys/types.h> // 提供类型pid_t的定义#include <sys/stat.h>#include <fcntl.h>续表函数原型int open(const char *pathname,flags,int perms)pathname 被打开的文件名(可包括路径名)O_RDONLY:只读方式打开文件O_WRONLY:可写方式打开文件O_RDWR:读写方式打开文件O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息。

这一参数可测试文件是否存在O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端O_TRUNC:如文件已经存在,并且以只读或只写成功打开,那么会先全部删除文件中原有数据flag:文件打开的方式O+APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾函数传入值perms 被打开文件的存取权限,为8进制表示法函数返回值成功:返回文件描述符失败: 1在open函数中,flag参数可通过“|”组合构成,但前3 个函数不能相互组合。

串口设置详解

串口设置详解

串口设置详解本节主要讲解设置串口的主要方法。

如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。

串口的设置主要是设置struct termios结构体的各成员值,如下所示:#include<termios.h>struct termio{ unsigned short c_iflag; /* 输入模式标志*/unsigned short c_oflag; /* 输出模式标志*/unsigned short c_cflag; /* 控制模式标志*/unsigned short c_lflag; /*本地模式标志*/unsigned char c_line; /* line discipline */unsigned char c_cc[NCC]; /* control characters */};在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控等。

另外c_iflag 和c_cc 也是比较常用的标志。

在此主要对这3 个成员进行详细说明。

c_cflag 支持的常量名称如表6.10 所示。

其中设置波特率为相应的波特率前加上‘B’,由于数值较多,本表没有全部列出。

表6.10 c_cflag支持的常量名称CBAUD 波特率的位掩码B0 0波特率(放弃DTR)《嵌入式Linux应用程序开发详解》——第6章、文件IO编程……续表B1800 1800波特率B2400 2400波特率B4800 4800波特率B9600 9600波特率B19200 19200波特率B38400 38400波特率B57600 57600波特率B115200 115200波特率EXTA 外部时钟率EXTB 外部时钟率CSIZE 数据位的位掩码CS5 5个数据位CS6 6个数据位CS7 7个数据位CS8 8个数据位CSTOPB 2个停止位(不设则是1个停止位)CREAD 接收使能PARENBPARODD校验位使能使用奇校验而不使用偶校验HUPCL 最后关闭时挂线(放弃DTR)CLOCAL 本地连接(不改变端口所有者)LOBLK 块作业控制输出CNET_CTSRTS 硬件流控制使能在这里,对于c_cflag成员不能直接对其初始化,而要将其通过“与”、“或”操作使用其中的某些选项。

第六章PL的基本原理及组成

第六章PL的基本原理及组成

第六章PL的基本原理及组成PL(Programmable Logic)是可编程逻辑器件,是一种集成电路芯片,由逐行可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)两种类型组成。

PL的基本原理是通过组合逻辑和时序逻辑的组合,根据用户的需求进行逻辑运算和控制,实现各种数字电路的功能。

PL器件根据所需要的功能和规模的不同,可以灵活地进行编程和配置。

PL的组成主要包括:1. 逻辑单元(Logic Elements):也称为查找表(Look-up Table),是PL中最基本的组件。

逻辑单元负责实现布尔函数和逻辑运算,每个逻辑单元可以实现多个逻辑门的功能。

2. 管理电路(Routing Circuitry):用于连接逻辑单元之间的信号线,将不同逻辑单元之间的输入和输出进行连接。

3. 配置存储器(Configuration Memory):用于存储逻辑单元的配置信息,包括逻辑单元的功能和连接方式。

配置存储器可以进行编程和擦除,以实现不同数字电路的配置。

4. 输入/输出接口(IO Interface):用于与外部系统进行通信,将外部信号输入到PL中,或将PL中的输出信号输出到外部系统中。

5. 时钟管理电路(Clock Management Circuitry):用于产生和管理时钟信号,控制逻辑单元的时序运算。

6. 测试和调试电路(Test and Debug Circuitry):用于进行PL器件的测试和调试操作,对逻辑运算结果进行验证。

PL的工作过程包括配置和工作两个阶段:1. 配置阶段:将用户设计好的逻辑电路的功能和连接方式编写成其中一种配置文件,通过编程器(Programmer)将配置文件写入配置存储器中。

在配置阶段,配置存储器被编程为实现特定的逻辑功能和连接方式。

2.工作阶段:在配置阶段完成后,PL器件进入工作阶段,根据配置存储器中的配置信息,逻辑单元开始进行逻辑运算和控制。

通过输入接口,PL器件接收外部信号,并根据配置存储器中的配置信息进行逻辑运算,输出结果通过输出接口输出到外部系统中。

第6章-异常处理ppt课件(全)

第6章-异常处理ppt课件(全)

6.1 了解异常
❖ 任务3:了解异常类常用的方法 【任务内容】了解异常类常用的方法 【能力目标】掌握异常类常用的方法
public class ExceptionDemo { public static void main(String[] args) { String strPrice = "20"; try { //进行数据类型转换时,parseFloat方法有可能出现异常 float fprice = Float.parseFloat(strPrice); } catch (NumberFormatException nfe) { System.err.println("Exception:" + nfe.getMessage()); System.err.println("Exception:" + nfe.toString()); nfe.printStackTrace(); } }

}
❖ catch( ArithmeticException e )

{ System.out.println("\t捕获异常: "+e);
}
❖ catch( ArrayIndexOutOfBoundsException e )

{ System.out.println("\t捕获异常:"+e.getMessage( )); }
程序中的错误可能来自于编译错误和运行错误。 编译错误是由于所编写的程序存在语法问题,未 能通过由源代码到目标代码的编译过程而产生的 错误,它将由语言的编译系统负责检测和报告; 运行错误是在程序的运行过程中产生的错误。

《LinuxUNIX系统编程手册》导读

《LinuxUNIX系统编程手册》导读

《LinuxUNIX系统编程⼿册》导读本书可以分为以下⼏个部分:1. 背景知识及概念UNIX、C语⾔以及 Linux的历史回顾,以及对UNIX标准的概述:《第1章历史和标准》。

以程序员为对象,对Linux和UNIX的概念进⾏介绍:《第2章基本概念》。

Linux和UNIX系统编程的基本概念:《第3章系统编程概念》。

2. 系统编程接⼝的基本特性⽂件I/O:《第4章⽂件I/O:通⽤的I/O模型》、《第5章深⼊探究⽂件I/O》。

内存分配:《》、《》、《》。

⽤户和组:《第8章⽤户和组》。

时间:《第10章时间》。

系统限制和选项:《第11章系统限制和选项》3. 系统编程接⼝的⾼级特性⽂件IO缓冲:《第13章⽂件I/O缓冲》。

⽂件系统:《第14章⽂件系统》。

⽂件属性:《第15章⽂件属性》。

扩展属性:《第16章扩展属性》。

访问控制列表:《第17章访问控制列表》。

⽬录和链接:《第18章⽬录和链接》。

信号:《第19章监控⽂件事件》、《第20章信号:基本概念》、《第21章信号:信号处理函数》、《第22章信号:⾼级特性》。

定时器:《第23章定时器与休眠》。

4. 进程、程序《》、《第9章进程凭证》、《》、《》、《》、《》、《》、《第34章进程组、会话和作业控制》、《第35章进程优先级和调度》、《第36章进程资源》、《》、《第38章编写安全的特权程序》、《第39章能⼒》、《第40章登录记账》、《第41章共享库基础》、《第42章共享库⾼级特性》。

5. 线程《》、《第30章线程:线程同步》、《第31章线程:线程安全和每线程存储》、《第32章线程:线程取消》、《第33章线程:更多细节》6. 进程间通信(IPC)《》:《第45章 System V IPC介绍》《第51章 POSIX IPC介绍》。

数据传输:《第44章管道和FIFO》、《第46章 System V 消息队列》、《》。

共享内存:《》、《第54章 POSIX 共享内存》。

串口设置详解

串口设置详解本节主要讲解设置串口的主要方法。

如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。

串口的设置主要是设置struct termios结构体的各成员值,如下所示:#include<termios.h>struct termio{ unsigned short c_iflag; /* 输入模式标志*/unsigned short c_oflag; /* 输出模式标志*/unsigned short c_cflag; /* 控制模式标志*/unsigned short c_lflag; /*本地模式标志*/unsigned char c_line; /* line discipline */unsigned char c_cc[NCC]; /* control characters */};在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控等。

另外c_iflag 和c_cc 也是比较常用的标志。

在此主要对这3 个成员进行详细说明。

c_cflag 支持的常量名称如表6.10 所示。

其中设置波特率为相应的波特率前加上‘B’,由于数值较多,本表没有全部列出。

表6.10 c_cflag支持的常量名称CBAUD 波特率的位掩码B0 0波特率(放弃DTR)《嵌入式Linux应用程序开发详解》——第6章、文件IO编程……续表B1800 1800波特率B2400 2400波特率B4800 4800波特率B9600 9600波特率B19200 19200波特率B38400 38400波特率B57600 57600波特率B115200 115200波特率EXTA 外部时钟率EXTB 外部时钟率CSIZE 数据位的位掩码CS5 5个数据位CS6 6个数据位CS7 7个数据位CS8 8个数据位CSTOPB 2个停止位(不设则是1个停止位)CREAD 接收使能PARENBPARODD校验位使能使用奇校验而不使用偶校验HUPCL 最后关闭时挂线(放弃DTR)CLOCAL 本地连接(不改变端口所有者)LOBLK 块作业控制输出CNET_CTSRTS 硬件流控制使能在这里,对于c_cflag成员不能直接对其初始化,而要将其通过“与”、“或”操作使用其中的某些选项。

labview路径操作与文件IO


LabVIEW程序设计
LabVIEW程序设计
图 7-4 拆分路径和创建路径函数
LabVIEW程序设计
当前VI路径——给出了当前所运行VI的路径 拆分路径——拆分一次后导引到“第7章”文件夹 拆分路径——拆分二次后导引到“例子”文件夹 创建路径——创建一个新的第6章文件夹路径
图 7-5 拆分和创建路径
LabVIEW程序设计
LabVIEW程序设计
1.4 波形文件
波形文件是一种特殊的数据记录文件,它记录了发生波形的一些基本信息, 如波形发生的起始时间、采样的间隔时间等。
LabVIEW程序设计
1.5 数据记录文件
数据记录文件是一种特殊的二进制文件,只是在LabVIEW等G语言中这类 型的文件扮演着比较重要的角色,所以在这里为其建立了一个独立的类型。数 据记录文件只能被G语言,如LabVIEW读取,它以记录的格式存储数据,一个 记录中可以存放几种不同类型的数据,或者可以说一个记录就是一个“簇”。
LabVIEW程序设计
图 7-3 非确定性路径文件的查找
LabVIEW程序设计
路径的简单拆分
假如我们希望使用第7章的“文件常量引导的路径关系.vi”来打开第6章的 文件夹,那就需要进行路径的拆分或创建。LabVIEW中也提供了路径拆分 和创建的函数,具体操作为:
》函数》编程》文件I/O》拆分路径(创建路径)
图8-4 格式化文件函数接线端子
LabVIห้องสมุดไป่ตู้W程序设计
2.4 扫描文件函数
扫描文件文本中的字符串、数值、路径和布尔数据,使文本转换为数据类型, 返回重复的引用句柄及转换后的输出,该输出结果以扫描的先后顺序排列。该 函数不可用于LLB中的文件。 该函数可扫描文件中的所有文本。但是,该函数无法判断扫描开始的起点。如 需判断扫描开始的起点,可使用读取文本文件和扫描字符串函数。

第6章 C语言和汇编语言混合编程(C55x DSP)


第6章 C语言和汇编语言混合编程
2. 编译模式 使用C编译器,在进入汇编程序时,C55x的CPL(编译模 式位)自动被置1,相对寻址模式使用堆栈指针SP。如果在汇 编程序中需要使用相对直接寻址模式访问数据存储器,则必 须改成数据页DP直接寻址模式,这可以通过清CPL位实现。 在返回C调用程序前,CPL位必须重新置1。
序清单输入到这些文件当中,保存并将其添加到工程之中。
第6章 C语言和汇编语言混合编程
3. 编译链接工程和装载输出文件 编译链接工程,修改错误,直到无错误信息提示为止, 再装载输出文件。 4. 打开CPU寄存器视窗 在主菜单中选择View→Registers→CPU Registers命令, 打开CPU寄存器视窗,观察CPU寄存器的变化情况。
int s4; s4=sum(); s1=mac1(x,a,n); //*ar0=x[0],*ar1=a[0],t0=n,return is stored in t0
s2=mac2(x,a,n);
//*ar0=x[0],*ar1=a[0],t0=n,return is stored in ac0
第6章 C语言和汇编语言混合编程
“ _ ”。以下是C函数调用汇编子程序的例子。
第6章 C语言和汇编语言混合编程
//C源程序: extern int sum(int *); //参考一个汇编函数 int x[4]={0x1223,0x345,0x2345,0x3444}; //定义全局变量并初始化
int s;
void main() {
参数类型和寄存器安排顺序表。
第6章 C语言和汇编语言混合编程
表6-1 参数类型和寄存器安排顺序表
第6章 C语言和汇编语言混合编程

第5、6章-java2实用教程PPT课件

– Java提供的包主要有
ng,java.io,java.math,java.util
java.applet,java.awt,java.awt.datatransfer
java.awt.event,java.awt.image,java.beans
,java.rmi,java.security,java.sql等
第五、六章 Java基础类
-字符串、日期、时间、数字
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java 基础类库简介
(Java2实用教程-4.18、第5、6章)
Java基础类库
– Java提供了用于语言开发的类库,称为
包 的 应 用
Java基础类库(JFC,Java Foundational Class) , 也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中

的类,包括

Object类

数据类型包裹类(the Data Type Wrapper)

字符串类(String、StringBuffer)
数学类(Math)
系统和运行时类(System、Runtime)
类操作类
.
4
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续)
– Float.parseFloat(“123.11”) //返回float型
– Long.parseLong(“123456”) //返回long型
.
8
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续) (参加补充章节) ——常量字符串类String
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.3.1 open和close (1) open和close函数说明 open:用于打开或创建文件 close:用于关闭一个打开文件 (2) open和close函数格式
表6.1
所需头文件
open 函数语法要点
#include<sys/types.h> //提供类型pid_t的定义 #include<sys/stat.h> #include<fentl.h>
在open函数中,flag参数可通过“|”组合构成,但 前3个函数不能相互组合。 表6.2 close 函数语法要点
所需头文件 函数原型 #include<unistd.h> int close(int fd)
函数传入值
函数返回值
fd: 文件描述符
0:成功 -1:出错
(3) open和close函数使用实例
/* open.c */ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> int main(void) { int fd; if((fd=open(“/tmp/hello.c",O_CREAT | O_TRUNC|O_WRONLY, 0600))<0) { perror("open:"); exit(1); } else{ printf(“Open file: hello.c %d\n”,fd); } if (close(fd)<0{ perror(“close:"); exit(1); } else printf(“close hello.c \n”); exit(0); }
#include<sys/types.h> #include<unistd.h> #include<fentl.h>
函数原型
int fcentl(int fd, int cmd, struct flock *lock)
fd: 文件描述符 cmd F_DUPFD: 复制文件描述符 F_GETFD: 获得fd的close-on-exec标志,若标志未设置,则文件经过exec函数之后仍保持打开状态 F_SETFD: 设置close-on-exec标志,该标志以参数arg的FD_CLOEXEC位决定 F_GETFL: 得到open设置的标志
(2) read、write和lseek函数格式
表6.3 所需头文件 read 函数语法要点 #include<unistd.h>
函数原型
size_t read(int fd,void *buf, size_t count) fd: 文件描述符
函数传入值
buf: 指定存储器读出数据的缓存区 count: 指定读出的字节数
ቤተ መጻሕፍቲ ባይዱ
O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作 为调用open()系统调用的那个进程的控制终端
O_TRUNC: 如文件已经存在,并且以:只读或只写成功打开,那 么会先全部删除文件中原有数据 O+APPEND: 以添加方式打开文件,在打开文件的同时, 文件 指针指向文件的末尾 perms 函数返回值 被打开文件的存取权限,为8进制表示法 成功:返回文件描述符 失败:-1
int main(void) { int i,fd,size,len; char *buf="Hello! I'm writing to this file!"; char buf_r[10]; len = strlen(buf); buf_r[10] = '\0'; if((fd = open("/tmp/hello.c", O_CREAT | O_TRUNC | O_RDWR,0666 ))<0){ perror("open:"); exit(1); } else printf("open file:hello.c %d\n",fd);
6.3.3 fcntl 共享: 多个用户共同使用、操作一个文件。 为避免共享的资源产生竞争的状态,Liunx通常 采用的方法是给文件上锁。 文件锁包括建议性锁和强制性锁 建议性锁:每个上锁文件的进程都要检查是否有 锁存在,并且尊重已有的锁,建议性锁不能阻 止对文件有写许可权的任何其他进程写该文件。 强制性锁:由内核执行的锁,当一个文件被上锁 进行写入操作的时候,内核将阻止其他任何文 件对其进行读写操作。采用强制性锁对性能的 影响很大。每次读写操作都必须检查是否有锁 存在。
(1)fcntl函数说明 Liunx中上锁函数有lock和fcntl,其 中:lock用于对文件施加建议性锁, fcntl可以施加建议性锁也可施加强制 性锁。同时fcntl还能对文件的某一记 录进行上锁,即记录锁 记录锁可分为读取锁(共享锁)和写 入锁(排斥锁)
(2)
所需头文件
fcntl函数格式 用于建立记录锁的fcntl函数格式如表6.6所示 表6.6 fcntl函数语法要点
6.1.2 用户编程接口(API) 在Liunx中,用户编程接口(API) 遵 循POSIX 标准,POSIX是可移植操作系统 接口(Portable Operating System Interface)的首字母缩写。由IEEE (Institute of Electrical and Electronic Engineering)开发,由ANSI 和ISO标准化。 POSIX是基于UNIX的,这 一标准意在期望获得源代码级的软件可 移植性。这些系统调用编程接口主要是 通过C库(libc)实现的
if((size = write( fd, buf, len)) < 0){ perror("write:"); exit(1); } else printf("Write:%s\n",buf);
lseek( fd, 0, SEEK_SET ); if((size = read( fd, buf_r, 10))<0){ perror("read:"); exit(1); } else printf("read form file:%s\n",buf_r); if( close(fd) < 0 ){ perror("close:"); exit(1); } else printf("Close hello.c\n"); exit(0); }

[root @(none) l]# ./open Open file: hello.c 3 Close hello.c [root @(none) tmp]# ls –l |grep hello.c -rw------- 1 root root 0 Dec 4 00:59 hello.c
函数传入值
F_SETFL: 改变open设置的标志 F_GETLK: 根据lock描述,决定是否上文件锁 F_SETLK: 设置lock描述的文件锁 F_SETLKW: 这是F_SETLK的阻塞版本(命令名中的W表示等待(wait))。如果存在其他锁,则调 用进程睡眠;如果捕捉到信号则睡眠中断 F_GETOWN: 检索将收到SIGIO和SIGURG信号的进程号或进程组号
函数返回值
成功: 已写的字节数 -1:出错
表6.5 所需头文件
函数原型 函数传入值
lseek函数语法要点 #include<unistd.h> #include<sys/types.h>
off_t lseek(int fd,off_t offset, int whence) fd: 文件描述符 offset:偏移量.每一读写操作所需要移动的距离,单位是字节的 数量,可正可负(向前移,向后移) whence: 当前位 置的基 点 SEEK_SET: 当前位置为文件的开头,新位置为偏移 量的大小 SEEK_CUR: 当前位置为文件指针的位置,新位置为 当前位置加上偏移量
6.1.3 系统命令 系统命令实际上是一个可执行程序, 它的内部引用了API来实现相应的功能。 其关系如图6.1所示。
系统命令 系统调用 内核空间 用户编程接口API 用户空间
图6.1 系统调用、API及系统命令之间的关系
6.2 Linux中文件及文件描述符概述 文件描述符:是一个非负整数,是一个索引值, 并指向内核中每个打开文件的记录表。当打开 或创建一个文件时,内核就向进程返回一个文 件描述符;当需要读写文件时,也需要把文件 描述符作为参数传递给相应的函数。 通常当启动一个进程时,都会打开3个文件:标 准输入,标准输出,标准出错处理。它们对应 的文件描述符为0,1,2。
6.3 不带缓存的文件I/O操作 7个函数:open、read、write、lseek、close 、 fcntl 和select 不带缓存是指每一个函数都只调用系统中的一个 函数。这些函数不是ANSI C的组成部分,是 POSIX的组成部分 ANSI(American National Standards Institute) ANSI C就是美国国家标准协会制定 的一个C语言的标准
SEEK_END: 当前位置为文件的结尾, 新位置为文件 的大小加上偏移量的大小
函数返回值 成功: 文件的当前位移 -1:出错
(3) 函数使用实例
/*write.c*/ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXSIZE
相关文档
最新文档