lseek函数-数据流图到模块结构图的直接转换方法

时间:2024-07-12 01:23:28
【文件属性】:

文件名称:lseek函数-数据流图到模块结构图的直接转换方法

文件大小:5.82MB

文件格式:PDF

更新时间:2024-07-12 01:23:28

APUE UNIX

3.6 lseek函数 每个打开文件都有一个与其相关联的“当前文件位移量”。它是一个非负整数,用以度量 从文件开始处计算的字节数。 (本节稍后将对“非负”这一修饰词的某些例外进行说明。 )通常, 读、写操作都从当前文件位移量处开始,并使位移量增加所读或写的字节数。按系统默认,当 打开一个文件时,除非指定O _ A P P E N D选择项,否则该位移量被设置为0。 可以调用l s e e k显式地定位一个打开文件。 #include #include off_t lseek(int f i l e d e s, off_t o f f s e t, int w h e n c e) ; 返回:若成功为新的文件位移,若出错为- 1 对参数offset 的解释与参数w h e n c e的值有关。 • 若w h e n c e是S E E K _ S E T,则将该文件的位移量设置为距文件开始处 offset 个字节。 • 若w h e n c e是S E E K _ C U R,则将该文件的位移量设置为其当前值加offset, offset可为正或负。 • 若w h e n c e是S E E K _ E N D,则将该文件的位移量设置为文件长度加offset, offset可为正或负。 若l s e e k成功执行,则返回新的文件位移量,为此可以用下列方式确定一个打开文件的当前 位移量: off_t currpos; currpos = lseek(fd, 0, SEEK_CUR); 这种方法也可用来确定所涉及的文件是否可以设置位移量。如果文件描述符引用的是一个管道 或F I F O,则l s e e k返回-1,并将e r r n o设置为E P I P E。 三个符号常数S E E K _ S E T,S E E K _ C U R和S E E K _ E N D是由系统V引进的。在 系统V之前,w h e n c e被指定为 0 (绝对位移量 ),1 (相对于当前位置的位移量 )或 2 (相对文件尾端的位移量)。很多软件仍直接使用这些数字进行编码。 在l s e e k中的字符l表示长整型。在引入o ff _ t数据类型之前,o f f s e t参数和返回值 是长整型的。 l s e e k是由V 7引进的,当时C语言中增加了长整型。 (在V 6中,用函 数s e e k和t e l l提供类似功能。 ) 实例 程序3 - 1用于测试其标准输入能否被设置位移量。 程序3-1 测试标准输入能否被设置位移量 3 8 U N I X环境高级编程


网友评论