列出指定目录下属于给定用户的所有文件
来源:互联网 发布:单片机校验位计算 编辑:程序博客网 时间:2024/06/05 10:40
要求:给定目录路径和用户名作为输入参数,打印输出该目录下属于该用户的所有文件名。
知识点:
struct passwd * getpwnam(const char * name)
#include<pwd.h>
#include<sys/types.h>
getpwnam()用来逐一搜索参数name 指定的账号名称,找到时便将该用户的数据以passwd结构返回。如果返回NULL 则表示已无数据,或有错误发生。
passwd结构体定义如下:
struct passwd
{
char * pw_name; /* Username. */
char * pw_passwd; /* Password. */
__uid_t -pw_uid; /* User ID. */
__gid_t -pw_gid; /* Group ID. */
char * pw_gecos; /* Real name. */
char * pw_dir; /* Home directory.*/
char * pw_shell; /* Shell program. */
}
代码:
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<unistd.h>
#include<errno.h>
#include<dirent.h>
#include<sys/types.h>
#include<pwd.h>
#include<string.h>
#define SIZE 1024
int dir_run(char *path,uid_t uid,char *username)
{
DIR *dir;
dir = opendir(path);
if (dir == NULL)
{
return -1;
}
struct stat st;
struct dirent *entry;
char fullpath[SIZE];
while((entry = readdir(dir)) != NULL)
{
if((strcmp(entry->d_name, ".") == 0) || (strcmp(entry->d_name, "..") == 0))
{
continue;
}
sprintf(fullpath, "%s/%s", path, entry->d_name);
if(lstat(fullpath, &st) != 0)
{
continue;
}
if(uid==st.st_uid)
{
printf("%s\n",entry->d_name);
}
if(S_ISDIR(st.st_mode))
{
printf("%s目录下属于给定用户%s的所有文件:\n",entry->d_name,username);
dir_run(fullpath,uid,username);
printf("\n");
}
}
closedir(dir);
return 0;
}
int main(int argc,char*argv[])
{
struct passwd *pw;
if(argc!=3)
{
printf("参数不正确!正确格式:./main filepath username\n");
exit(1);
}
pw = getpwnam(argv[2]);
if (!pw)
{
printf("%s is not exist\n", argv[2]);
return -1;
}
dir_run(argv[1],pw->pw_uid,argv[2]);
return 0 ;
}
- 列出指定目录下属于给定用户的所有文件
- python列出指定文件夹下所有给定后缀名的文件
- 列出指定目录下的所有文件的绝对路径
- 递归列出指定目录下的所有文件的绝对路径
- 列出指定目录下的所有文件的路径
- [Linux C]列出指定目录下的所有文件(夹)
- javaFile循环列出指定目录下的所有文件(源代码)
- 递归列出指定目录下所有的符号链接文件
- 递归列出指定目录下所有的普通文件
- 列出指定目录下后缀是.mp3的所有文件
- 列出指定目录所有文件并修改文件名的源代码
- 列出指定目录的文件
- Shell循环列出目录下所有文件或查找目录下包含指定字符串的文件
- 用C#列出指定目录下的所有指定扩展名(多个扩展名)的文件
- 搜索指定目录下的所有文件或者指定文件(可用于多级目录)
- 列出指定目录下的所有文件和文件夹及子文件的内容
- java 列出指定目录下的所有文件及文件扩展名
- PYTHON 列出指定目录下的文件
- 通过DOS命令批量重命名文件
- Qt 的线程与事件循环
- 黑马程序员_【总结】_多线程知识梳理2(end)
- STL系列之vector(1)
- WPF学习
- 列出指定目录下属于给定用户的所有文件
- spring security 3 简单例子
- java征程
- WCF开发步骤
- 事件机制
- 快速排序
- .net 验证码
- Makefile的一些小结
- 在指定目录下创建一个新目录