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