IO进程线程day3

目录

使用文件IO完成对图像的读写操作

使用stat函数实现 ls -l 指令功能

思维导图


使用文件IO完成对图像的读写操作

#include <head.h>

int main(int argc, const char *argv[])
{
	//	使用文件IO完成对图像的读写操作

	int fd=-1;
	if((fd=open("./dog.bmp",O_RDWR))==-1){
		perror("open error");
		return -1;
	}
	//读取图片的大小
	lseek(fd,2,SEEK_SET);
	int size =0;
	read(fd,&size,sizeof(size));
	printf("%d\n",size);

	lseek(fd, 54,SEEK_SET);  //将光标定位到图像内容
	unsigned char color[3] = {0, 0, 0}; //定义一个颜色,黑色
	for(int i=0; i<80; i++){
		for(int j=0; j<1000; j++){
			int res = write(fd, color, sizeof(color)); //将颜色写入图片中
		}
	}
	close(fd);//关闭文件
	return 0;
}

使用stat函数实现 ls -l 指令功能

#include <head.h>

int main(int argc, const char *argv[])
{
	//使用stat函数实现 ls -l 指令功能
    //判断外部传参的个数
    if(argc != 2)
    {
        perror("error");
        return -1;
    }

    //定义文件状态结构体变量,用于返回文件信息
    struct stat st;
    //调用函数,获取给定的文件状态
    if(stat(argv[1], &st) == -1)
    {
        perror("stat error");
        return -1;
    }
	//打印文件类型
    switch(st.st_mode&S_IFMT)
    {
    case S_IFSOCK: printf("s"); break;

    case S_IFLNK: printf("l"); break;

    case S_IFREG: printf("-"); break;

    case S_IFBLK: printf("b"); break;

    case S_IFDIR: printf("d"); break;

    case S_IFCHR: printf("c"); break;

    case S_IFIFO: printf("p"); break;
    }
	//打印用户权限
	(st.st_mode & S_IRUSR) ?printf("r") : printf("-");
    (st.st_mode & S_IWUSR) ?printf("w") : printf("-");
    (st.st_mode & S_IXUSR) ?printf("x") : printf("-");
	//打印用户所属组权限
	(st.st_mode & S_IRGRP) ?printf("r") : printf("-");
    (st.st_mode & S_IWGRP) ?printf("w") : printf("-");
    (st.st_mode & S_IXGRP) ?printf("x") : printf("-");
	//打印其他用户权限
	(st.st_mode & S_IROTH) ?printf("r") : printf("-");
    (st.st_mode & S_IWOTH) ?printf("w") : printf("-");
    (st.st_mode & S_IXOTH) ?printf("x") : printf("-");

	printf(" %ld ",st.st_nlink);  //文件硬链接数

	printf("%d ",st.st_uid);  //我不会打印文件所属用户  只会打印用户ID
	printf("%d ",st.st_gid);  //我不会打印文件所属组  只会打印组ID
    printf("%8ld ", st.st_size);  //文件大小
	
	//将得到的秒数分解成时间结构体
	struct tm *tp=	localtime(&st.st_mtim);

	printf("%d ",tp->tm_mon+1); //月份
	printf("%d ",tp->tm_mday);  //天数
	printf("%2d:%2d ",tp->tm_hour,tp->tm_min);  //打印时和分
	printf("%s ",argv[1]); //打印文件名
	printf("\n");
	return 0;
}

思维导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值