【无标题】

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;
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值