思维导图
使用标准io完成两个文件的拷贝
#include <head.h>
int main(int argc, const char *argv[])
{
//判断输入合理
if(argc!=3)
{
printf("输入有误\n");
return -1;
}
//定义指针只想文件
FILE *fp1=NULL,*fp2=NULL;
if((fp1=fopen(argv[1],"r"))==NULL)
{
perror("");
return -1;
}
if((fp2=fopen(argv[2],"w"))==NULL)
{
perror("");
return -1;
}
char buf[10];//定义搬运工
while(!feof(fp1))//循环当光标到文件结尾时结束
{
int res=fread(buf,1,sizeof(buf),fp1);//读取文件中的内容
fwrite(buf,1,res,fp2);//写入读取的内容
}
fclose(fp1);
fclose(fp2);
return 0;
}
使用文件io完成两个文件的拷贝
#include <head.h>
int main(int argc, const char *argv[])
{
if(argc!=3)
{
printf("输入有误\n");
return -1;
}
//定义两个文件描述符
int fd1=-1,fd2=-1;
//使用文件描述符打开文件
if((fd1=open(argv[1],O_RDONLY))==-1)
{
perror("");
return -1;
}
if((fd2=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
perror("");
return -1;
}
char buf[10];//定义搬运工
int res=1;//定义记录搬运工的工作量
while(res!=0)
{
res=read(fd1,buf,sizeof(buf));//搬东西
write(fd2,buf,res);//办多少东西写多少东西
}
close(fd1);
close(fd2);
return 0;
}
将stat函数实现一遍
#include <head.h>
int main(int argc, const char *argv[])
{
//定义存放读取文件信息的结构体指针
struct stat p;
stat(argv[1],&p);//调用函数读取文件信息
//判断文件类型
switch(p.st_mode&S_IFMT)
{
case S_IFSOCK:
{
printf("s\n");
break;
}
case S_IFBLK:
{
printf("b\n");
break;
}
case S_IFCHR:
{
printf("c\n");
break;
}
case S_IFDIR:
{
printf("d\n");
break;
}
case S_IFREG:
{
printf("-\n");
break;
}
case S_IFLNK:
{
printf("l\n");
break;
}
case S_IFIFO:
{
printf("p\n");
break;
}
default:
{
printf("程序出错\n");
}
}
printf("权限\t链接数\tUID\tGID\t大小\tINODE\n");
printf("%#o\t%ld\t%d\t%d\t%ld\t%ld\n",p.st_mode&0777,p.st_nlink,p.st_uid,p.st_gid,p.st_size,p.st_ino);
return 0;
}
将目录操作实现一遍
#include <head.h>
int main(int argc, const char *argv[])
{
//定义目录文件类型指针
DIR *dirp=NULL;
if((dirp=opendir(argv[1]))==NULL)
{
perror("");
return -1;
}
printf("类型\tinode\t大小\t名字\n");
struct dirent *p=NULL;
while((p=readdir(dirp))!=NULL)
{
switch(p->d_type)
{
case DT_BLK:
{
printf("b\t");
break;
}
case DT_CHR:
{
printf("c\t");
break;
}
case DT_DIR:
{
printf("d\t");
break;
}
case DT_REG:
{
printf("-\t");
break;
}
case DT_LNK:
{
printf("l\t");
break;
}
case DT_SOCK:
{
printf("s\t");
break;
}
case DT_FIFO:
{
printf("p\t");
break;
}
default:
{
printf("未知类型\n");
}
}
printf("%ld\t%d\t%s\n",p->d_ino,p->d_reclen,p->d_name);
}
closedir(dirp);
return 0;
}