#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
//在形参位置char* ptr等价于char ptr[10]
//char ptr[] 可以提示用户,需要输入一个char类型的数组首地址
//char ptr[10] 可以提示用户,需要传入一个char类型的数组首地址,容量为10
char* get_file_permission(mode_t mode, char ptr[10], long size)
{
//文件权限数字翻译为字符输出
//判断输入的数组容量是否大于等于10,如果不是,则返回失败的情况
if (size < 10)
return NULL;
bzero(ptr, size); //清空数组
char per[] = "rwx";
char buf[10] = "";
int i = 0;
for ( ; i < 9; i++)
{
if ((mode & (0400 >> i)) == 0)
{
buf[i] = '-';
}
else
{
//运行到当前位置,则代表有对应位置的权限
//此时需要打印rwx这些字符
buf[i] = per[i%3];
}
}
strcpy(ptr, buf);
return ptr;
}
int main(int argc, const char *argv[])
{
struct stat buf;
if (stat("./00-00.txt", &buf) < 0)
{
perror("stat");
return -1;
}
//文件类型以及权限
printf("mode:0%o\n",buf.st_mode); //unsigned int
char perm[10] = "";
get_file_permission(buf.st_mode, perm, sizeof(perm));
printf("perm = %s\n", perm);
//硬链接数
printf("\nnlink:%lu\n",buf.st_nlink);
//文件所属用户
printf("udi:%d\n",buf.st_uid);
//文件所属组用户
printf("gid:%d\n",buf.st_gid);
//文件大小
printf("size:%ld\n",buf.st_size);
//日期
printf("time:%ld\n",buf.st_ctime);
return 0;
}
C语言IO进程线程(2023-02-23)
最新推荐文章于 2024-09-05 23:31:31 发布