1.图片读写操作
#include <myhead.h>
int main(int argc, const char *argv[])
{
int fd=-1;
//只读权限打开图片1
if((fd=open("./焰灵姬.bmp",O_RDONLY))==-1)
{
perror("open");
return -1;
}
int wfd=-1;
//只写权限打开图片2,存在则清空,不存在则创建
if((wfd=open("./ylj.bmp",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
{
if(errno==-1)
{
printf("文件已经存在\n");
wfd=open("./ylj.bmp",O_WRONLY|O_TRUNC);
}
else
{
perror("open");
return -1;
}
}
char a[128]="";
while(1)
{
//从图片1中读取数据到字符数组a
int n=read(fd,a,sizeof(a));
if(n<=0)
{
break;
}
//从字符数组中获取数据写到图片2中
write(wfd,a,n);
}
printf("图片拷贝结束\n");
//关闭文件描述符
close(fd);
close(wfd);
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 st;
struct stat *p=&st;
int n=stat(argv[1],p);
//文件类型
char a;
switch(p->st_mode&S_IFMT)
{
case S_IFSOCK:
a='s'; //套接字文件
break;
case S_IFLNK:
a='l'; //链接文件
break;
case S_IFREG:
a='-'; //普通文件
break;
case S_IFBLK:
a='b'; //块设备文件
break;
case S_IFDIR:
a='d'; //目录文件
break;
case S_IFCHR:
a='c'; //字符设备文件
break;
case S_IFIFO:
a='p'; //管道文件
break;
}
//用户名
struct passwd *user=getpwuid(p->st_uid);
//组名
struct group*group=getgrgid(p->st_gid);
printf("%c%#o %ld %s %s %ld %s",a,p->st_mode&0777,p->st_nlink,user->pw_name,group->gr_name,p->st_size,ctime(&p->st_atime));
return 0;
}