1.思维导图
2.使用标准IO进行文件拷贝
#include<head.h>
int main(int argc, const char *argv[])
{
//判断输入格式
if(argc!=3)
{
printf("error\n");
return -1;
}
//定义源文件指针,以只读的方式打开
FILE *fp=fopen(argv[1],"r");
if(fp==NULL)
{
perror("fp open error");
return -1;
}
//定义目标文件指针,并以只写的方式打开
FILE *fq=fopen(argv[2],"w");
if(fq==NULL)
{
perror("fq open error");
return -1;
}
//定义一个字符串搬运工
char buf[20]="";
//以循环的方式读取源文件内容,写入到目标文件中
while(1)
{
int res=fread(buf,1,sizeof(buf),fp);
fwrite(buf,1,res,fq);
if(feof(fp))
{
break;
}
}
//关闭文件
fclose(fp);
fclose(fq);
printf("复制成功!");
return 0;
}
3.使用文件IO进行拷贝
#include<head.h>
int main(int argc, const char *argv[])
{
//判断输入格式
if(argc!=3)
{
printf("输入格式错误!\n");
return -1;
}
//定义文件描述符变量,以只读的方式打开原文件
int fd=-1;
if((fd=open(argv[1],O_RDONLY))==-1)
{
perror("fd open error");
return -1;
}
//定义文件描述符变量,以只写的方式打开目标文件
int fp=-1;
if((fp=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
perror("fp open error");
return -1;
}
//定义一个字符串搬运工
char buf[20]="";
//以循环的方式进行对源文件的读取,对目标文件的写入
while(1)
{
int res=read(fd,buf,sizeof(buf));
write(fp,buf,res);
if(res==0)
{
break;
}
}
//关闭文件
close(fd);
close(fp);
printf("复制完成!\n");
return 0;
}
4.stat函数的实现
#include<head.h>
int main(int argc, const char *argv[])
{
//判断输入格式
if(argc!=2)
{
perror("输入错误");
return -1;
}
//定义结构体变量
struct stat sb;
//调用函数
stat(argv[1],&sb);
switch(sb.st_mode & S_IFMT)
{
case S_IFSOCK:
{
printf("是套接字文件!\n");
}
break;
case S_IFLNK:
{
printf("是链接文件!\n");
}
break;
case S_IFREG:
{
printf("是普通文件!\n");
}
break;
case S_IFBLK:
{
printf("是块设备文件!\n");
}
break;
case S_IFDIR:
{
printf("是目录!\n");
}
break;
case S_IFCHR:
{
printf("是字符设备文件!\n");
}
break;
case S_IFIFO:
{
printf("是管道文件!\n");
}
break;
}
printf("权限:%#o inode=%ld size=%ld\n",sb.st_mode&0777,sb.st_ino,sb.st_size);
return 0;
}
4. 目录功能的实现
#include<head.h>
int main(int argc, const char *argv[])
{
//判断外部传参个数
if(argc != 2)
{
printf("input error\n");
printf("usage:./a.out name\n");
return -1;
}
//定义目录指针
DIR *dp = NULL;
//打开目录
if((dp = opendir(argv[1])) == NULL)
{
perror("opendir error");
return -1;
}
//读取目录中的文件或目录信息
struct dirent *sdp = NULL;
while((sdp = readdir(dp)) != NULL)
{
//输出当前文件或目录的信息
printf("inode:%10ld, size:%10d, %10s\n",
sdp->d_ino, sdp->d_reclen, sdp->d_name);
//输出类型
switch(sdp->d_type)
{
case DT_BLK:
{
printf("b\n");
}
break;
case DT_CHR:
{
printf("c\n");
}
break;
case DT_DIR:
{
printf("d\n");
}
break;
case DT_FIFO:
{
printf("p\n");
}
break;
case DT_LNK:
{
printf("l\n");
}
break;
case DT_REG:
{
printf("-\n");
}
break;
case DT_SOCK:
{
printf("s\n");
}
break;
}
}
//关闭目录
closedir(dp);
return 0;
}