Day3
思维导图
作业
使用标准io完成两个文件的拷贝
代码
#include <myhead.h>
int main(int argc, const char *argv[])
{
if(argc!=3)
{
puts("终端输入格式不合理");
return -1;
}
FILE *src=0;
FILE *dest=0;
if((src=fopen(argv[1],"r"))==0)
{
perror("src open error");
return -1;
}
mf((dest=fopen(argv[2],"w"))==0)
{
perror("dest open error");
return -1;
}
char buf[10]="";
while(!feof(src))
{
int res=fread(buf,1,sizeof(buf),src);
fwrite(buf,1,res,dest);
}
fclose(src);
fclose(dest);
puts("拷贝成功");
return 0;
}
运行结果
使用文件IO完成两个文件的拷贝
代码
#include <myhead.h>
int main(int argc, const char *argv[])
{
if(argc!=3)
{
puts("输入格式不合理");
return -1;
}
int src=0;
int dest=0;
if((src=open(argv[1],O_RDONLY))==-1)
{
perror("打开源文件错误");
return -1;
}
if((dest=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
perror("打开源文件错误");
return -1;
}
char buf[10]="";
int res=10;
while(res==10)
{
res=read(src,buf,sizeof(buf));
write(dest,buf,res);
}
close(src);
close(dest);
puts("拷贝成功");
return 0;
}
运行结果
将stat函数实现一遍
代码
#include <myhead.h>
int main(int argc, const char *argv[])
{
if(argc!=2)
{
puts("error");
return -1;
}
struct stat sb;
stat(argv[1],&sb);
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("块设备文件\n"); break;
case S_IFCHR: printf("字符设备文件\n"); break;
case S_IFDIR: printf("目录文件\n"); break;
case S_IFIFO: printf("管道文件\n"); break;
case S_IFLNK: printf("链接文件\n"); break;
case S_IFREG: printf("普通文件\n"); break;
case S_IFSOCK: printf("套接字文件\n"); break;
default: printf("unknown?\n"); break;
}
printf("%#o\t%ld\t%ld\n",sb.st_mode&0777,sb.st_size,sb.st_ino);
return 0;
}
运行结果
将目录操作实现一遍
代码
#include <myhead.h>
int main(int argc, const char *argv[])
{
if(argc!=2)
{
puts("error");
return -1;
}
DIR *dp = 0;
if((dp=opendir(argv[1]))==0)
{
perror("");
return -1;
}
struct dirent *sdp =0;
while((sdp=readdir(dp))!=0)
{
printf("inode:%10ld,size:%10d,%10s,",sdp->d_ino,sdp->d_reclen,sdp->d_name);
switch (sdp->d_type) {
case DT_BLK: printf("块设备文件\n"); break;
case DT_CHR: printf("字符设备文件\n"); break;
case DT_DIR: printf("目录文件\n"); break;
case DT_FIFO: printf("管道文件\n"); break;
case DT_LNK: printf("链接文件\n"); break;
case DT_REG: printf("普通文件\n"); break;
case DT_SOCK: printf("套接字文件\n"); break;
case DT_UNKNOWN: printf("unknown\n"); break;
}
}
return 0;
}
运行结果