Linux文件编程之文件光标

博客介绍了文件光标的相关知识,包括光标的定义,如在文本框或程序中显示输入位置,不同系统下样子不同;说明了使用光标的原因,如避免操作位置错误。还介绍了光标的API,以及通过编程举例展示如何用光标移动完成文件内容读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.关于光标的几个问题

1.什么是光标?
当你在一个文本框或某种程序中输入文字时,总有一个光标来显示你将要输入文字的位置。大部分的光标都为一个小竖线,规则的闪动.而在DOS下有些光标则是短短的小横线,同样规则的闪动.现用的windows光标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同。
2.为什么要使用光标?
光标根据你的程序有时会发生移动,使得你再对文件进行操作时会移动到不是你需要的位置,比如之前写到的write函数执行完后光标会移动到写入的尾端,你再对其进行读的时候,它只会读出文件后面空白的内容,这时就需要将光标移动到文件的头位置。

二.光标的api

       #include <sys/types.h>
       #include <unistd.h>

       off_t lseek(int fd, off_t offset, int whence);

将文件读写指针相对whence移动offset个字节
fd:文件标识符,前面有介绍
offset:对whence的偏移值,如果whence为SEEK_SET,offset为0,则光标指向文件的头。

whence :
SEEK_SET:
指向文件的头。
SEEK_CUR:
指向文件的当前光标位置
SEEK_END:
指向文件的尾

三.编程举例

对之前读取文件的函数所编写用两次打开文件的程序进行修改,用光标移动的方式完成:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        //int open(const char *pathname, int flags);
        int fd;
        char *buf=NULL;
        char *readbuf=NULL;
        readbuf=(char *)malloc(128);
        buf=(char *)malloc(128);
        fd=open("./file2",O_RDWR|O_CREAT,0600);
        if(fd == -1){
                printf("creat fail\n");
        }
        printf("creat success\n");
        //ssize_t write(int fd, const void *buf, size_t count);
        printf("plese input msg to file2:");
        gets(buf);
        int n_write=write(fd,(void *)buf,strlen(buf));
        printf("n_write=%d\n",n_write);
//      off_t lseek(int fd, off_t offset, int whence);
        lseek(fd,0,SEEK_SET);

        int n_read=read(fd,(void *)readbuf,n_write);
        printf("n_read=%d\n",n_read);
        printf("readbuf=%s\n",readbuf);
        close(fd);
        return 0;
}

lseek的返回值为偏移量,上面代码中的lseek处,write执行完后光标指向所输入内容的末尾出,加上lseek函数,光标再次移动到内容的首位置,使其能够读出file2文件的内容。

运行结果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值