接昨天的文件系统
文件系统
递归遍历目录 ls -R
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/stat.h>
#include<dirent.h>
void isFile(char*dir);
//处理目录,打开目录,读取
void read_dir(char* dir)
{
char path[256];
DIR* dp;
struct dirent * sdp;
dp = opendir(dir);
if(dp == NULL){
perror("opendir error");
return ;
}
//读取目录项
while((sdp = readdir(dp))!=NULL){
if((strcmp(sdp->d_name , "."))==0 || (strcmp(sdp->d_name , ".."))==0){
continue;
}
//读取到的目录项本身不可以访问,需要拼接。目录/目录项
sprintf(path , "%s/%s" , dir , sdp->d_name);
//判断文件类型,目录递归进入,显示文件大小。
isFile(path);
}
closedir(dp);
return;
}
void isFile(char* name)
{
int ret = 0;
struct stat sb;
//判断文件类型,获取文件属性
ret = stat(name , &sb);
if(ret == -1){
perror("stat error");
return;
}
//是目录文件,
if(S_ISDIR(sb.st_mode)){
read_dir(name);
}
//是普通文件,显示名字/大小
printf("%10s\t\t%ld\n",name , sb.st_size);
return 0;
}
int main(int argc , char *argv[])
{
//判断命令行参数
if(argc == 1){
isFile(".");
}else{
isFile(argv[1]);
}
return 0 ;
}
重定向
重定向
cat myls.c > out
dup/dup2函数 duplicate
int dup(int oldfd) 返回值:新的文件描述符
dup2 : dup to
int dup2(oldfd , newfd);
dup2 返回的是新文件描述符fd2, 写入fd1指向的文件