思维导图
1> 使用标准io完成两个文件的拷贝
#include<myhead.h>
int main(int argc, const char *argv[])
{
//输入3个正确的文件
if(argc!=3)
{
printf("input error\n");
printf("usage: ./a.out srcfile dstfile\n");
return -1;
}
//定义两个文件,源文件和目标文件
FILE *src, *dst;
//以只读形式打开src
if((src=fopen(argv[1],"r"))==NULL)
{
printf("fopen srcfile error\n");
return -1;
}
//以只写形式打开dst
if((dst=fopen(argv[2],"w"))==NULL)
{
printf("fopen dstfile error\n");
return -1;
}
//定义一个数组存放读取内容
char buf[128]="";
while(!feof(src))
{
int res=fread(buf,1,sizeof(buf),src);
fwrite(buf,1,res,dst);
}
//关闭两个文件
fclose(src);
fclose(dst);
return 0;
}
2> 使用文件IO完成两个文件的拷贝
#include<myhead.h>
int main(int argc, const char *argv[])
{
//提醒输入错误
if(argc!=3)
{
printf("input file error\n");
printf("usage: ./a.out srcfile dstfile\n");
return -1;
}
//定义两个文件
int src=-1;
int dst=-1;
//以只读形式打开文件srcfile
if((src = open(argv[1], O_RDONLY))==-1)
{
perror("open srcfile error");
return -1;
}
//以只写形式打开文件dstfile
if((dst = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664))==-1)
{
perror("open dstfile error");
return -1;
}
//定义一个数组存储读取内容
char buf[128]="";
//循环遍历
while(1)
{
int res=read(src,buf,sizeof(buf));
if(res==0 || res==-1)
break;
write(dst,buf,res); //res保证只写入文件读取个数
}
//关闭两个文件
close(dst);
close(src);
return 0;
}
3> 将stat函数实现一遍
#include<myhead.h>
int main(int argc, const char *argv[])
{
//定义文件属性类型的数据,用于存储获得的文件属性
struct stat sb;
//调用函数,把文件属性存储到结构体sb中
stat(argv[1],&sb);
switch(sb.st_mode&S_IFMT)
{
case S_IFSOCK:
{
printf("这是套接字文件\t");
}
break;
case S_IFLNK:
{
printf("这是链接文件\t");
}
break;
case S_IFREG:
{
printf("这是普通文件\t");
}
break;
case S_IFBLK:
{
printf("这是块设备文件\t");
}
break;
case S_IFDIR:
{
printf("这是目录文件\t");
}
break;
case S_IFCHR:
{
printf("这是字符文件\t");
}
break;
case S_IFIFO:
{
printf("这是管道文件\t");
}
break;
}
printf("%#o\t%ld\t%ld\n",sb.st_mode&0777,sb.st_size,sb.st_ino);
return 0;
}
4> 将目录操作实现一遍
#include<myhead.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=0;
//打开目录
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, ",\
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;
case DT_UNKNOWN:
{
printf("un\n");
}
break;
}
}
//关闭文件
closedir(dp);
return 0;
}