1.给定一个文件,输出文件的类型,权限、大小和inode号,要求要输出对应的类型
#include <stdio.h>
#include <string.h>
#include <myhead.h>
char getFileType(int type) {
switch(type) {
case S_IFREG: return ‘-’; break;
case S_IFSOCK: return ‘s’ ; break;
case S_IFLNK: return ‘l’; break;
case S_IFBLK: return ‘b’; break;
case S_IFCHR: return ‘c’; break;
case S_IFIFO: return ‘p’; break;
case S_IFDIR: return ‘d’;break;
default: break;
}
return ‘\0’;
}
void getFileMode(int mode,char str[]) {
if(S_IRUSR&mode) {
strcat(str,“r”);
}else {
strcat(str,“-”);
}
if(S_IWUSR&mode) {
strcat(str,“w”);
}else {
strcat(str,“-”);
}
if(S_IXUSR&mode) {
strcat(str,“x”);
}else {
strcat(str,“-”);
}
if(S_IRGRP&mode) {
strcat(str,“r”);
}else {
strcat(str,“-”);
}
if(S_IWGRP&mode) {
strcat(str,“w”);
}else {
strcat(str,“-”);
}
if(S_IXGRP&mode) {
strcat(str,“x”);
}else {
strcat(str,“-”);
}
if(S_IROTH&mode) {
strcat(str,“r”);
}else {
strcat(str,“-”);
}
if(S_IWOTH&mode) {
strcat(str,“w”);
}else {
strcat(str,“-”);
}
if(S_IXOTH&mode) {
strcat(str,“x”);
}else {
strcat(str,“-”);
}
}
int main(int argc,const char *argv[])
{
struct stat sb;
if(argc <2) {
printf(“请输入文件名\n”);
return -1;
}
stat(argv[1],&sb);
int type = sb.st_mode&S_IFMT;
int mode = sb.st_mode & 0777;
int c = getFileType(type);
char str[10]=“”;
getFileMode(mode,str);
printf(" %c%s\t%ld\t%ld\n",c,str,sb.st_size,sb.st_ino);
return 0;
}