Linux文件操作

文件操作

一、VFS

linux主要特征:一切皆文件

通过VFS(虚拟文件系统)来实现

VFS(虚拟文件系统)中实现了一个内核文件结构数组,会根据文件的不同类型索引到不同的文件操作上。

二、文件操作

1.查看文件信息

//stat命令
stat 文件名

2、文件查找

//1、find 查找目录 -name 文件名
//	如果不知道名字,可以用“*”通配符,匹配任意字符,“?”匹配任意1个字符
find . -name aa.c			// .表示当前目录
find . -name a?.c

//2、find 查找目录 -size 大小
find . -size +1k				// +1k表示大于1k的文件
find . -size +1k -size -2M 	     // 表示查找当前目录下大于1k小于2M的文件

//3、find 查找目录 -type d/f
find . -type f					 // 表示查找当前目录下所有普通文件
find . -type d					 // 表示查找当前目录下所有目录
    
//4、按文件内容查找
//grep -r “查找的内容” 查找路径

grep -r “print” ./		 //表示在当前目录下查找包含字符串“print”的文件

3、文件解压

//1、gzip 文件名		表示:压缩	注意:不能压缩目录

//2、gunzip 文件名.gz	表示:解压 	

//3、bzip2 文件名		表示:压缩	注意:不能压缩目录

//4、bunzip2 文件名		表示:解压

//zip 压缩包名字 压缩文件名 -r 压缩目录名
zip test a.txt b.txt -r abc1 abc2

//unzip 压缩包名字
unzip test
//unzip test -d 目录名			表示把test压缩包解压到目录名下的文件夹内

4、文件操作缓冲区

标准输入:stdin 句柄:0
标准输出:stdout 句柄:1
标准错误:stderr 句柄:2

三种缓冲区:

#include <stdio.h>
#include <string.h>
#include <errno.h>  //标准错误相关函数

//setbuf(FILE* stream,char* buf);   
//写入到参数1的输出在参数2的缓冲区中,当参数2的缓冲区满或fflush时,
//参数2的内容才会写入到参数1中

//setvbuf(FILE* stream,char* buf,int mode,size_t size)
//mode:模式(三种缓冲模式),size:缓冲区大小

int main(int argc,char* argv[])
{
    FILE* pf;
    char msg1[] = "hello world\n";
    char msg2[] = "hello\nworld";
    char buff[128];

    if((pf = fopen("no_buf1.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setbuf(pf,NULL);    //设置无缓冲
    fwrite(msg1,8,1,pf);
    printf("test setbuff(no buff)! check no_buf1.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf); //fclose函数执行完毕之后,才会将输入写到文件里面


    if((pf = fopen("no_buf2.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    //_IONBF:表示无缓冲
    setvbuf(pf,NULL,_IONBF,0);    //1.期望缓冲区的文件指针,2.缓冲区的地址
    //3.缓冲区类型,4.缓冲区大小
    fwrite(msg1,8,1,pf);
    printf("test setbuff(no buff)! check no_buf2.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);



    if((pf = fopen("l_buf.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setvbuf(pf,buff,_IOLBF,128);    //设置行缓冲
    fwrite(msg2,sizeof(msg2),1,pf);
    printf("test setbuff(line buff)! check l_buf.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);


    if((pf = fopen("f_buf.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setvbuf(pf,buff,_IOFBF,0);    //设置全缓冲
    fwrite(msg2,sizeof(msg2),1,pf);
    printf("test setbuff(full buff)! check f_buf.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);


    if((pf = fopen("f_buf1.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setvbuf(pf,buff,_IOFBF,128);    //设置全缓冲
    fwrite(msg2,sizeof(msg2),1,pf);
    printf("test setbuff(full buff)! check f_buf1.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);

    return 0;
}

1、全缓冲
典型代表:对磁盘文件的读写

 if((pf = fopen("no_buf1.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setbuf(pf,NULL);    //设置无缓冲
    fwrite(msg1,8,1,pf);
    printf("test setbuff(no buff)! check no_buf1.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf); //fclose函数执行完毕之后,才会将输入写到文件里面

2、行缓冲
典型代表:标准输入和标准输出。碰到\n会清空缓冲区

    if((pf = fopen("l_buf.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setvbuf(pf,buff,_IOLBF,128);    //设置行缓冲
    fwrite(msg2,sizeof(msg2),1,pf);
    printf("test setbuff(line buff)! check l_buf.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);

3、无缓冲
典型代表:标准错误

if((pf = fopen("f_buf1.txt","w")) == NULL ) 
    {
        perror("file opne failure!\n");
        return 1;
    }
    memset(buff,0,sizeof(char)*128);
    setvbuf(pf,buff,_IOFBF,128);    //设置全缓冲
    fwrite(msg2,sizeof(msg2),1,pf);
    printf("test setbuff(full buff)! check f_buf1.txt\n");
    printf("now buff data is: %s \n",buff);
    printf("enter the enter to continue!\n");
    getchar();
    fclose(pf);

posted @ 2022-01-25 22:07  宣哲  阅读(153)  评论(0编辑  收藏  举报