第6章 文件IO编程
plc编程的io分配表

plc编程的io分配表PLC(Programmable Logic Controller,可编程逻辑控制器)是一种数字化电子设备,常用于自动化控制系统中。
在PLC编程过程中,IO(Input/Output)分配表是一个重要的工具,用于记录和管理PLC 与外部设备之间的输入和输出。
IO分配表通常是一个表格,列出了PLC所连接的各个输入和输出设备的详细信息。
每个设备通常有一个唯一的编号,例如数字输入设备(DI)可以按照DI1、DI2、DI3等进行编号,数字输出设备(DO)可以按照DO1、DO2、DO3等进行编号。
表格中的每一行对应一个设备,列出了设备的编号、设备类型、设备地址、设备功能等信息。
在PLC编程中,IO分配表的创建是一个非常重要的步骤。
通过仔细编写和管理IO分配表,可以确保PLC与外部设备之间的正确连接和数据传输。
在创建IO分配表时,需要考虑以下几个方面:1. 设备类型和功能:列出每个设备的类型和功能,例如数字输入、数字输出、模拟输入、模拟输出等。
这可以帮助编程人员在后续的程序编写中正确地使用每个设备。
2. 设备地址:对于每个设备,需要指定其在PLC中的地址。
地址可以是一个数字或者一个符号,用于在程序中引用该设备。
对于数字输入和输出设备,地址通常对应PLC的输入和输出模块的物理接口。
对于模拟输入和输出设备,地址可以对应PLC的模拟输入输出模块的接口。
3. 输入和输出信号:对于每个设备,需要记录其输入和输出信号的类型。
例如,对于数字输入设备,可能有开关信号、传感器信号等;对于数字输出设备,可能有继电器控制信号、报警信号等。
这些信号在程序编写中需要正确的处理和判断。
4. 连接状态:IO分配表还可以记录每个设备的连接状态,以便于维护和故障排除。
例如,可以使用一个额外的列来标记设备的正常连接、断开连接或故障状态。
在实际的PLC编程中,IO分配表是一个非常重要的参考工具。
它可以帮助编程人员准确地了解和管理PLC与外部设备之间的连接关系,保证系统的正常运行。
io读取文件的流程

io读取文件的流程一、打开文件在使用IO读取文件之前,首先需要打开文件。
打开文件的过程可以通过提供文件路径和文件模式来完成。
文件路径是文件在计算机中的位置,可以是绝对路径或相对路径。
文件模式则指定了打开文件的方式,包括只读、写入、追加等模式。
在Python中,我们可以使用open()函数来打开文件,并将其赋值给一个变量,以便后续使用。
二、读取文件内容一旦文件成功打开,我们就可以通过IO操作来读取文件的内容了。
读取文件内容的方式有多种,比如逐行读取、一次性读取等。
其中,逐行读取是最常见的方式之一。
在Python中,我们可以使用readline()函数来逐行读取文件内容。
该函数每次读取一行内容,并将其作为字符串返回。
三、处理文件内容读取文件内容后,我们可以对其进行进一步的处理。
处理的方式可以根据具体需求而定,比如数据分析、统计、转换等。
在这一步中,我们可以使用字符串处理函数、列表操作等方法对文件内容进行操作。
四、关闭文件在文件处理完成后,我们需要关闭文件。
关闭文件是一个良好的编程习惯,它可以释放系统资源,并避免文件被其他程序占用。
在Python中,我们可以使用close()函数来关闭文件。
使用IO读取文件的流程可以总结为四个步骤:打开文件、读取文件内容、处理文件内容和关闭文件。
这四个步骤是按照顺序进行的,缺一不可。
下面将通过一个示例来演示如何使用IO读取文件的流程。
假设我们有一个名为"example.txt"的文本文件,其中包含了一些学生的成绩信息,每行一个学生,格式为"姓名成绩"。
我们希望读取该文件,并计算平均成绩。
我们使用open()函数打开文件,并将其赋值给一个变量,比如file。
文件路径可以是绝对路径,也可以是相对路径,这里我们假设文件和程序在同一个目录下,因此可以直接使用文件名。
接下来,我们使用readline()函数逐行读取文件内容。
由于文件内容可能包含多行,我们可以使用一个循环来读取每一行,并将其存储到一个列表中,比如lines。
plc编程的io分配表

plc编程的io分配表PLC(可编程逻辑控制器)编程的IO(输入/输出)分配表是在PLC编程过程中用来记录和安排输入输出设备和信号的详细表格。
它是一个重要的文档,用于规划和组织PLC系统中的I/O设备。
IO分配表应该包含以下关键信息:1. 设备编号:每个I/O设备应该有一个唯一的编号,以便在表格中进行标识。
2. 设备名称:每个I/O设备应该有一个清晰的名称,以便操作员能够识别设备。
3. 输入/输出类型:指明每个I/O设备是输入还是输出设备。
4. 设备地址:每个I/O模块在PLC中占用的地址,这个地址应该在PLC编程软件中可访问。
5. 信号类型:指明每个I/O设备传输的信号类型,例如数字信号、模拟信号、通讯信号等。
6. 信号描述:对每个信号进行详细描述,以便操作员和编程人员能够理解其作用和功能。
7. 信号状态:记录每个信号的状态,例如开关开/关、传感器激活/未激活等。
8. 状态描述:对每个状态进行描述,以便操作员和编程人员能够理解其含义。
9. 设备连接:记录每个I/O设备与PLC连接的情况,包括连接端子号、连接脚位等。
10. 备注:对每个I/O设备可以添加一些额外的备注信息,可以是设备的特殊功能、以前的故障记录等。
编写IO分配表之前,需要对PLC系统进行详细的规划和设计。
首先,确定需要的输入输出设备,然后确定每个设备的功能和重要性。
接下来,确定每个设备所需的IO点数量,并确定设备的类型和传输信号类型。
在编写IO分配表时,需要特别注意以下几点:1. 设备编号和设备名称应该清晰而简明地标识每个设备,避免使用过于复杂的编号和名称。
2. 设备地址应该精确,并与PLC编程软件中的实际地址相对应。
3. 对每个信号的描述应该具体明确,以便于操作员和编程人员理解。
4. 状态描述可以使用常用的术语,以增加可读性和理解度。
5. 设备连接信息应该准确,以便操作员和维护人员能够方便地找到和连接设备。
最后,要定期更新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成员不能直接对其初始化,而要将其通过“与”、“或”操作使用其中的某些选项。
红旗LINUX案例教程第6章

机械工业出版社
案ቤተ መጻሕፍቲ ባይዱ小结
中等职业教育“十一五”规划教材۰电子商务专业
shell编程分为如下两个步骤:
1.输入和保存源程序
用编辑软件(文本编辑E器v)al输ua入t程io序n 的on源ly代. 码,然后保存。如果 te源d程w序it较h短A的sp,o可se以.直Sl接id在e提s 示fo符r .下N输E入T。3.5 Client Profile 5.2
Linux 系统有三个重要的部分:核心、Shell和工具
程序。核心部分是处Ev于a底lu层a的tio,n用o户nl不y.能和它直接沟通, ted w因沟系it此通统hC,。初Ao始s必这pp化y须个or时si要界ge就有面h.为St一便2l用i个是0d户0e友S4s运h好e-行fl2的lo。0一r界当1.个面1N用称E,A户为Ts让登ps用3h录oe.户ls5Ll的ei通nC程uP过xli序系te它yn。统和LtS之t底Phde后r.层lol,的file 5.2
s2="zjCyvosp2"yright 2004-2011 Aspose Pty Ltd.
echo $s2 s3=4+5 echo $s3
机械工业出版社
中等职业教育“十一五”规划教材۰电子商务专业
步骤二:调试程序并分析程序运行结果
Evaluation only. ted with Aspose.Slides for .NET 3.5 Client Profile 5.2
2.运行C程op序yright 2004-2011 Aspose Pty Ltd.
在shell提示符下,键入“. 程序名”,如键入“. ExCsb6.1.1”。 要注意的是,“.”符号后要有空格。
第六章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器件接收外部信号,并根据配置存储器中的配置信息进行逻辑运算,输出结果通过输出接口输出到外部系统中。
io模块的使用方法

io模块的使用方法io模块是Python中用于进行输入输出操作的标准库之一,它提供了一系列函数和类,方便我们进行文件读写、网络通信等操作。
本文将介绍io模块的使用方法。
一、文件读写1. 打开文件使用open函数可以打开一个文件,并返回一个文件对象。
open函数的第一个参数是文件路径,第二个参数是打开模式。
常用的打开模式有:- 'r':只读模式,文件必须存在- 'w':写入模式,如果文件不存在则创建,如果文件存在则清空内容- 'a':追加模式,在文件末尾添加内容,如果文件不存在则创建- 'x':独占创建模式,只能创建新文件,如果文件已存在则报错例如,要打开一个名为"test.txt"的文件,可以使用以下代码:```pythonfile = open("test.txt", "r")```2. 读取文件内容文件对象有多种读取内容的方法,常用的有:- read(size):读取指定大小的内容,如果不指定大小则读取整个文件内容- readline():读取一行内容- readlines():读取所有行,并返回一个列表,每行作为列表的一个元素示例代码:```pythonfile = open("test.txt", "r")content = file.read()print(content)```3. 写入文件内容文件对象有多种写入内容的方法,常用的有:- write(str):写入字符串- writelines(lines):写入多行,参数是一个字符串列表示例代码:```pythonfile = open("test.txt", "w")file.write("Hello, world!")file.close()```二、网络通信1. TCP通信io模块提供了socket类,可以用于进行TCP通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
API
前面讲到的系统调用并不是直接与程序员进行交互的,它 仅仅是一个通过软中断机制向内核提交请求,以获取内核 服务的接口。在实际使用中程序员调用的通常是用户编程 接口——API 系统命令相对API更高了一层,它实际上一个可执行程序, 它的内部引用了用户编程接口(API)来实现相应的功能。
termios是在POSIX规范中定义的标准接口,表示终端设备(包 括虚拟终端、串口等)。因为串口是一种终端设备,所以通过终 端编程接口对其进行配置和控制。 终端有三种工作模式,分别为规范模式(canonical mode)、 非规范模式(non-canonical mode)和原始模式(raw mode)。 通过在termios结构的c_lflag中设置ICANNON标志来定义终端 是以规范模式(设置ICANNON标志)还是以非规范模式(清除 ICANNON标志)工作,默认情况为规范模式。
系统调用
所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口, 用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。 例如用户可以通过进程控制相关的系统调用来创建进程、实现进程调 度、进程管理等。 为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在 Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间 和用户空间(也就是常称的内核态和用户态),它们分别运行在不同 的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不 允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作 用户数据,调用用户空间的函数。 但是,在有些情况下,用户空间的进程需要获得一定的系统服务(调 用内核空间程序),这时操作系统就必须利用系统提供给用户的“特 殊接口”——系统调用规定用户进程进入内核空间的具体位置。进行 系统调用时,程序运行空间需要从用户空间进入内核空间,处理完后 再返回到用户空间。
Select的返回 管道1 管道2 标准输入
初始化读文件描述符集合
打印到 屏幕上
打印到 屏幕上
是否输入“q”? 超时/出错
是 有效的文件描述符存在? 否 结束
6.4 嵌入式Linux串口应用编程
串口概述
常见的数据通信的基本方式可分为并行通信与串行通信两种。 并行通信是指利用多条数据传输线将一个字数据的各比特 位同时传送。它的特点是传输速度快,适用于传输距离短 且传输速度较高的通信。 串行通信是指利用一条传输线将数据以比特位为单位顺序 传送。特点是通信线路简单,利用简单的线缆就可实现通 信,降低成本,适用于传输距离长且传输速度较慢的通信。 串口是计算机一种常用的接口,常用的串口有RS-232-C接 口。它是于1970年由美国电子工业协会(EIA)联合贝尔 系统、调制解调器厂家及计算机终端生产厂家共同制定的 用于串行通讯的标准,它的全称是“数据终端设备(DTE) 和数据通讯设备(DCE)之间串行二进制数据交换接口技 术标准”。该标准规定采用一个DB25芯引脚的连接器或9 芯引脚的连接器
串口设置- termios结构
struct termios { unsigned short c_iflag; unsigned short c_oflag; unsigned short c_cflag; unsigned short c_lflag; unsigned char c_line; unsigned char c_cc[NCC]; speed_t c_ispeed; speed_t c_ospeed; }; /* 输入模式标志 */ /* 输出模式标志 */ /* 控制模式标志*/ /* 本地模式标志 */ /* 线路规程 */ /* 控制特性 */ /* 输入速度 */ /* 输出速度 */
函数格式(1)
函数格式(2)
函数格式(3)
示例
阅读代码并运行示例6-3-1
文件锁
文件锁包括建议性锁和强制性锁。建议性锁要求每个上锁文件 的进程都要检查是否有锁存在,并且尊重已有的锁。在一般情 况下,内核和系统都不使用建议性锁。强制性锁是由内核执行 的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其 他任何文件对其进行读写操作。采用强制性锁对性能的影响很 大,每次读写操作都必须检查是否有锁存在。 在Linux中,实现文件上锁的函数有lockf()和fcntl(),其中lockf() 用于对文件施加建议性锁,而fcntl()不仅可以施加建议性锁,还 可以施加强制锁。同时,fcntl()还能对文件的某一记录上锁,也 就是记录锁。 记录锁又可分为读取锁和写入锁,其中读取锁又称为共享锁, 它能够使多个进程都能在文件的同一部分建立读取锁。而写入 锁又称为排斥锁,在任何时刻只能有一个进程在文件的某个部 分上建立写入锁。当然,在文件的同一部分不能同时建立读取 锁和写入锁。
poll()函数格式
示例
阅读代码并运行示例6-3-3-1(select)和6-3-3-2 (poll)
是 准备工作: 创建两个管道 读文件描述符集合的重置 Tmp_inset<-Inset Select: 监视文件描述符集合的文件
开始
获得三个文件描述符 (两个管道和标准输入)
终端模式(2)- 非规范模式
在非规范模式下,所有的输入是即时有效的,不需要用户另外输入行 结束符,而且不可进行行编辑。在非规范模式下,对参数MIN (c_cc[VMIN])和TIME(c_cc[VTIME])的设置决定read()函数的调 用方式。设置可以有4种不同的情况。 MIN = 0和TIME = 0:read()函数立即返回。若有可读数据,则读取数 据并返回被读取的字节数,否则读取失败并返回0。 MIN > 0和TIME = 0:read()函数会被阻塞直到MIN个字节数据可被读 取。 MIN = 0和TIME > 0:只要有数据可读或者经过TIME个十分之一秒的 时间,read()函数则立即返回,返回值为被读取的字节数。如果超时并 且未读到数据,则read()函数返回0。 MIN > 0和TIME > 0:当有MIN个字节可读或者两个输入字符之间的时 间间隔超过TIME个十分之一秒时,read()函数才返回。因为在输入第 一个字符之后系统才会启动定时器,所以在这种情况下,read()函数至 少读取一个字节之后才返回。
select()和poll()
select()和poll()的I/O多路转接模型是处理I/O复用的 一个高效的方法。它可以具体设置程序中每一个 所关心的文件描述符的条件、希望等待的时间等, 从select()和poll()函数返回时,内核会通知用户已 准备好的文件描述符的数量、已准备好的条件等。 通过使用select()和poll()函数的返回结果,就可以 调用相应的I/O处理函数了。
示例
阅读代码并运行示例6-3-2
I/O处理的模型
阻塞I/O模型:在这种模型下,若所调用的I/O函数没有完成相关的功 能,则会使进程挂起,直到相关数据到达才会返回。如常见对管道设 备、终端设备和网络设备进行读写时经常会出现这种情况。 非阻塞模型:在这种模型下,当请求的I/O操作不能完成时,则不让进 程睡眠,而且立即返回。非阻塞I/O使用户可以调用不会阻塞的I/O操 作,如open()、write()和read()。如果该操作不能完成,则会立即返回 出错(例如:打不开文件)或者返回0(例如:在缓冲区中没有数据可 以读取或者没空间可以写入数据)。 I/O多路转接模型:在这种模型下,如果请求的I/O操作阻塞,且它不 是真正阻塞I/O,而是让其中的一个函数等待,在这期间,I/O还能进 行其他操作。如本节要介绍的select()和poll函数(),就是属于这种模型。 信号驱动I/O模型:在这种模型下,通过安装一个信号处理程序,系统 可以自动捕获特定信号的到来,从而启动I/O。这是由内核通知用户何 时可以启动一个I/O操作决定的。 异步I/O模型:在这种模型下,当一个描述符已准备好,可以启动I/O 时,进程会通知内核。现在,并不是所有的系统都支持这种模型。
本章的主要内容
6.1 6.2 6.3 6.4 6.5 6.6
Linux系统调用及用户编程接口(API) Linux中文件及文件描述符概述 底层文件I/O操作 嵌入式Linux串口应用编程 标准I/O编程 实验
6.1 Linux系统调用及用户编程接口(API)
终端模式(1)- 规范模式
Hale Waihona Puke 在规范模式下,所有的输入是基于行进行处理。 在用户输入一个行结束符(回车符、EOF等)之 前,系统调用read()函数读不到用户输入的任何字 符。除了EOF之外的行结束符(回车符等)与普 通字符一样会被read()函数读取到缓冲区之中。在 规范模式中,行编辑是可行的,而且一次调用 read()函数最多只能读取一行数据。如果在read()函 数中被请求读取的数据字节数小于当前行可读取 的字节数,则read()函数只会读取被请求的字节数, 剩下的字节下次再被读取。
6.3 底层文件I/O操作
函数说明
open()函数是用于打开或创建文件,在打开或创建文件时可以指定文 件的属性及用户的权限等各种参数。 close()函数是用于关闭一个被打开的文件。当一个进程终止时,所有 被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显 示地关闭一个文件。 read()函数是用于将从指定的文件描述符中读出的数据放到缓存区中, 并返回实际读入的字节数。若返回0,则表示没有数据可读,即已达到 文件尾。读操作从文件的当前指针位置开始。当从终端设备文件中读 出数据时,通常一次最多读一行。 write()函数是用于向打开的文件写数据,写操作从文件的当前指针位 置开始。对磁盘文件进行写操作,若磁盘已满或超出该文件的长度, 则write()函数返回失败。 lseek()函数是用于在指定的文件描述符中将文件指针定位到相应的位 置。它只能用在可定位(可随机访问)文件操作中。管道、套接字和 大部分字符设备文件是不可定位的,所以在这些文件的操作中无法使 用lseek()调用。