IO进程线程Day3

IO进程线程Day3_第1张图片

1> 使用标准io完成两个文件的拷贝

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

你可能感兴趣的:(服务器)