Linux下对文件的读取操作

174 阅读2分钟

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

Linux对文件的操作

linux下一切皆是文件,要学懂linux就要对linux的文件操作有深刻的认知。

以下是对文件进行的读写操作。

对文件的读:

#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/types.h>int main()
{
        int fd;
        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 sucess\n");
                }
​
        }
        return 0;
​
}

对文件的写操作:

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>int main()
{
        int fd;
        char *buf="I love you the way your 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);
        write(fd,buf,strlen(buf));
        return 0;
}

总结:

通过对文件的简单读写操作,对linux的学习进行了初步的准备工作。

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;
}

image.png