1> 使用标准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;
}
2> 使用文件IO完成两个文件的拷贝
#include <head.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 srcfd, dstfd;
//以只读的形式打开源文件
if((srcfd = open(argv[1], O_RDONLY)) ==-1)
{
perror("open srcfile error");
return -1;
}
//以只写的形式打开目标文件
if((dstfd = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0664)) ==-1)
{
perror("open dstfile error");
return -1;
}
//不断将源文件中的内容读出,写入的目标文件中
//直到源文件全部读取结束
char buf[128] = "";
while(1)
{
memset(buf, 0, sizeof(buf)); //将容器清空
int res = read(srcfd, buf, sizeof(buf)); //从源文件中读取数据
write(dstfd, buf, res); //将数据写入目标文件
//对读取的数据个数进行判断
if(res == 0)
{
break;
}
}
//关闭两个文件
close(srcfd);
close(dstfd);
printf("拷贝成功\n");
return 0;
}
3> 将stat函数实现一遍
#include <head.h>
int main(int argc, const char *argv[])
{
//文件属性获取
//定义结构体变量sb
struct stat sb;
//stat函数将文件属性写入结构体成员中
stat(argv[1],&sb);
//判断文件类型
switch (sb.st_mode&S_IFMT)
{
case S_IFSOCK:
printf("这是套接字文件");
break;
case S_IFBLK:
printf("这是块设备文件");
break;
case S_IFCHR:
printf("这是字符文件");
break;
case S_IFLNK:
printf("这是链接文件");
break;
case S_IFREG:
printf("这是普通文件");
break;
case S_IFDIR:
printf("这是目录");
break;
case S_IFIFO:
printf("这是管道文件");
break;
default:
printf("error");
break;
}
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:%8ld, size:%8d, %8s, ",\
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;
}