问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux C语言如何得到一个文件的权限并输出

发布网友 发布时间:2022-04-28 18:41

我来回答

3个回答

热心网友 时间:2023-07-25 17:10

/*-楼主可以参考一下我写的这段程序---------*/
/*-----用stat函数得到文件信息,并用函数转化为文本输出,就跟ls命令一样-----*/
/*----------注释我写得很详细,望采纳-----------*/
#include <sys/types.h> /*-----这三个头文件一定要有-*/
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void mode_to_letter(int mode,char *str)
{
/*-------这个函数用来把模式值转化为字符串------*/
str[0]='-'; /*------这里的S_*****都是宏定义,用来判断模式属性-*/

if(S_ISDIR(mode)) str[0]='d';/*-文件夹-*/
if(S_ISCHR(mode)) str[0]='c';/*-字符设备-*/
if(S_ISBLK(mode)) str[0]='b';/*-块设备-*/

if(mode & S_IRUSR) str[1]='r';/*--用户的三个属性-*/
else str[1]='-';
if(mode & S_IWUSR) str[2]='w';
else str[2]='-';
if(mode & S_IXUSR) str[3]='x';
else str[3]='-';

if(mode & S_IRGRP) str[4]='r';/*--组的三个属性-*/
else str[4]='-';
if(mode & S_IWGRP) str[5]='w';
else str[5]='-';
if(mode & S_IXGRP) str[6]='x';
else str[6]='-';

if(mode & S_IROTH) str[7]='r';/*-其他人的三个属性-*/
else str[7]='-';
if(mode & S_IWOTH) str[8]='w';
else str[8]='-';
if(mode & S_IXOTH) str[9]='x';
else str[9]='-';

str[10]='\0';
}

int main(int argc,char *argv[])
{
struct stat sb;/*- 定义stat结构--*/
char str[12];
if(argc!=2){
fprintf(stderr,"Usage: %s <pathname>\n",argv[0]);
exit(EXIT_FAILURE);
}

if(stat(argv[1],&sb)==-1){/*-stat函数,详情请 man 2 stat 查看 -*/
perror("stat");
exit(EXIT_FAILURE);
}

printf("Mode:%lo(octal)\n",(unsigned long)sb.st_mode);
mode_to_letter(sb.st_mode,str);
printf("Mode:%s\n",str);
return 0;
}

热心网友 时间:2023-07-25 17:10

参考ln -l命令的输出结果,编写了以下程序(即输出结果和ls -l命令的输出结果相似),通过命令行传入要查看的目录,如果没有传入参数,则显出当前目录:

#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pwd.h>
#include <time.h>

char *getmod(mode_t mode,char *line) /*生成权限描述字符串*/
{
memset(line,0,sizeof(char)*11);

strcat(line,S_ISDIR(mode)?"d":"-");
strcat(line,(mode&S_IRWXU)&S_IRUSR?"r":"-");
strcat(line,(mode&S_IRWXU)&S_IWUSR?"w":"-");
strcat(line,(mode&S_IRWXU)&S_IXUSR?"x":"-");

strcat(line,(mode&S_IRWXG)&S_IRGRP?"r":"-");
strcat(line,(mode&S_IRWXG)&S_IWGRP?"w":"-");
strcat(line,(mode&S_IRWXG)&S_IXGRP?"x":"-");

strcat(line,(mode&S_IRWXO)&S_IROTH?"r":"-");
strcat(line,(mode&S_IRWXO)&S_IWOTH?"w":"-");
strcat(line,(mode&S_IRWXO)&S_IXOTH?"x":"-");

return line;
}
char *directory(char *argv) /*从程序参数取出目录*/
{
int i;
for (i=strlen(argv)-1;i;--i)
if (argv[i]=='/'){
argv[i+1]='\0';
break;
}
return argv;
}

int main(int argc,char *argv[])
{
DIR *dirp;
struct dirent *dirst;
struct stat finfo;
char *path,fname[512],mod[11],ctm[10];
struct passwd *user=NULL;
struct tm *ltm;

if (argc==1) path=directory(argv[0]);
else path=argv[1];

dirp=opendir(path);
if (!dirp)
{
fprintf(stderr,"ERROR\n");
exit(-1);
}

for (dirst=readdir(dirp);dirst;dirst=readdir(dirp))
{
strcpy(fname,path);

lstat(strcat(strcat(fname,"/"),dirst->d_name),&finfo);
user=getpwuid(finfo.st_uid);

printf("%s\t%10s\t",getmod(finfo.st_mode,mod),user->pw_name);
printf("%10d\t%9d\t",finfo.st_ino,finfo.st_size);
ltm=localtime(&finfo.st_mtime);
strftime(ctm,9,"%b",ltm);
printf("%5s",ctm);
strftime(ctm,9,"%d",ltm);
printf("%3s",ctm);
strftime(ctm,9,"%Y",ltm);
printf("%5s\t",ctm);
printf("%s\n",dirst->d_name);
}
closedir(dirp);
return 0;
}

热心网友 时间:2023-07-25 17:11

int chmod( const char *filename, int pmode )

成功返回0,失败返回-1 pmode和命令chmod的用法一致
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何为职务侵占罪进行辩护 职务侵占如何辩护 职务侵占罪有效辩护点有哪些 miui11开发者选项在哪_小米miui11开发者选项在哪 查询考研成绩需要什么 考研查分前要做什么 考研查询需要什么证件 研究生什么专业好 什么专业的研究生最好 考研究生什么专业好 Linux中c语言中汉字字符串的输出 linux下Shell编程:输出当前目录下所有文件,并输出文件总数和目录总数... Linux下JAVA程序输出中文变问号 linux 下C语言调用和输出问题 linux守护进程的输出问题 linux中怎么使后台进程的输出至控制终端 中国电子中原科技智慧城项目中国一冶有中标吗 上海临港科技创新城经济发展有限公司怎么样? linux c++程序结束了还有输出 北斗科技创新城(青岛)有限公司怎么样? linux用c语言输出一句话 文化科技创新项目,有没有得过金桥奖 Linux中将一个程序输出到终端的命令 山西科技创新城投资开发有限公司怎么样? linux 后台程序输出 大连生态科技创新城的介绍 关于大连生态科技创新城亿达春田项目? linux 如何把一个程序的所有输出内容重定向,程序A调用库函数B,如何运行A时console不输出任何打印信息 青岛科技城是个什么项目呢?想了解一下 linux进程输出为啥被截成两半 移动的服务密码怎么找回 关于春天的抒情散文有哪些? 有关春天的散文诗 酱肉馅饺子的家常做法大全怎么做好 酱肉馅怎么样炒才好吃!求详细 如何制作酱肉包子馅? 描写春天的散文诗,能提供几篇范文吗? 包子酱肉馅的做法 酱肉包子馅的详细制作方法 结婚迁户口需要什么证件和材料 结婚之后迁户口需要什么证件? 我的家庭理财规划书 适合家庭理财规划 家庭生命周期的理财规划 家庭成长期理财规划风险 成长期的家庭怎样做好理财规划 麻烦根据案例做一份理财规划书。 华为荣耀20pro,信息通知音量过大怎么减小? 哪里有实用的个人和家庭理财表格?我要做家庭理财规划书,应该怎么做? 个人理财规划书