1> 使用文件IO完成对图像的读写操作
#include<myhead.h>
int main(int argc, const char *argv[])
{
//只读打开图片
int fd=-1;
if((fd = open("./R-C.bmp",O_RDWR))==-1)
{
perror("open");
return -1;
}
//向后便宜两个字节找到大小的起始地址
lseek(fd,2,SEEK_SET);
//计算图片大小
ssize_t bmpsize=0;
bmpsize=lseek(fd,0,SEEK_END);
//bmpsize=read(fd,&bmpsize,sizeof(char));
printf("图片大小为:%ld\n",bmpsize);
//再次偏移48字节到图像位置
lseek(fd,54,SEEK_SET);
//定义颜色
unsigned char col[3]={255,255,255};
for(int i=0;i<400;i++)
{
for(int j=0;j<1200;j++)
{
write(fd,col,sizeof(col));
}
}
//关闭图片
close(fd);
return 0;
}
效果图:
2> 使用stat函数实现 ls -l 指令功能
#include<myhead.h>
int main(int argc, const char *argv[])
{
if(argc != 2)
{
printf("终端输入有误!\n");
return -1;
}
/*
struct stat* p=NULL;
if(stat(argv[1],p)==-1)
{
perror("stat");
return -1;
}
*/
struct stat st;
if(stat(argv[1],&st)==-1)
{
perror("stat");
return -1;
}
//判断文件类型
switch(st.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;
default:break;
}
//权限
//struct tm* tn=localtime(st.st_atim);
long tn=st.st_atime;
struct tm* tt=localtime(&tn);
struct passwd * user=getpwuid(st.st_uid);
printf("用户名%s\n",user->pw_name);
printf("用户组名%s\n",user->pw_name);
printf("文件权限是:%#o \n",st.st_mode & 0777);
printf("硬链接数目为%ld\n",st.st_nlink);
printf("用户名ID:%d\n",st.st_uid);
printf("用户组ID:%d\n",st.st_gid);
printf("文件大小:%ld\n",st.st_size);
printf("%02d %02d %02d:%02d\n",tt->tm_mon+1,tt->tm_mday,tt->tm_hour,tt->tm_min);
printf("文件名:%s\n",argv[1]);
return 0;
}
效果图: