Linux下对文件的读取操作

163 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Linux下对文件的读取操作

linux下对文件的读取操作,像下面这样会读取不到内容,原因就是光标已经到内容的最后,再进行读取就会读不到内容。 运行结果如图所示:

在这里插入图片描述

代码如下:

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main()
{
        int fd;
        char *buf="I love you the way you are!\n";
        fd=open("./file1",O_RDWR);

        if(fd==-1){
                printf("open file1 failed\n");
                fd =open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0){
                        printf("create file1 success!\n");

                }
        }
        printf("open success: fd=%d\n",fd);
        //ssize_t write(int fd,const void *buf,size_t count);
        int n_write=write(fd,buf,strlen(buf));
        if(n_write!=-1){
                printf("Write %d bytes to file1\n",n_write);
}
        char *readBuf;
        readBuf=(char*)malloc(sizeof(char)*n_write+1);
        //ssize_t read(int fd,void *buf,size_t count);
        int n_read=read(fd,readBuf,n_write);
        printf("read %d ,context:%s\n",n_read,readBuf);
        close(fd);
        return 0;
}

解决方式一便是关闭文件然后重新打开,这样光标就会回到开始,然后就可以进行内容的读取操作了。修改后的代码如下:

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main()
{
        int fd;
        char *buf="I love you the way you are!\n";
        fd=open("./file1",O_RDWR);

        if(fd==-1){
                printf("open file1 failed\n");
                fd =open("./file1",O_RDWR|O_CREAT,0600);
                if(fd>0){
                        printf("create file1 success!\n");

                }
        }
        printf("open success: fd=%d\n",fd);
        //ssize_t write(int fd,const void *buf,size_t count);
        int n_write=write(fd,buf,strlen(buf));
        if(n_write!=-1){
                printf("Write %d bytes to file1\n",n_write);
}
    	//以下是修改的代码
    	close(fd);
    	fd=open("./file1",O_RDWR);
    	//以上是修改的代码
        char *readBuf;
        readBuf=(char*)malloc(sizeof(char)*n_write+1);
        //ssize_t read(int fd,void *buf,size_t count);
        int n_read=read(fd,readBuf,n_write);
        printf("read %d ,context:%s\n",n_read,readBuf);
        close(fd);
        return 0;
}

执行结果如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ilhUVsjK-1632924727873)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20210929220804340.png)] 另外一种解决方案在下一篇进行介绍。