1 默认情况下  实际用户和有效用户是一样的

实际用户:执行用户
  有效用户:权限用户


getuid()  实际用户


geteuid() 有效用户

chmod u+s 之后 ,其他人执行文件时,实际用户和有效用户会不一样

2 目录相关函数

int chdir(const char *path);改变当前目录


int mkdir(const char *pathname, mode_t mode); 创建目录


int rmdir(const char *pathname); 删除目录


 int unlink(const char *pathname); 删除文件


mode_t umask(mode_t mask); 设置文件权限屏蔽位


stat  fstat lstat文件目录状态

3 目录的遍历

3.1 方法一 opendir + readdir


DIR *opendir(const char *name);


struct dirent *readdir(DIR *dirp);


int closedir(DIR *dirp);

struct dirent {

               ino_t          d_ino;       /* inode number */

               off_t          d_off;       /* offset to the next dirent */

               unsigned short d_reclen;    /* length of this record */

               unsigned char  d_type;      /* type of file; not supported


by all file system types */

               char      
 d_name[256]; /* filename */

           };

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>//exit() int main()
{
DIR *d = opendir("/home/zhao");
if(d == 0)
{
perror("opendir:%m\n");
exit(1);
} struct dirent * de;
while(de=readdir(d))
{
printf("%s \t%d\n",de->d_name,de->d_type);
}
//d_type 4 表示目录 8表示文件 closedir(d); }

3.2   方法2 scandir


   int scandir(const char *dirp, //目录名 


struct dirent ***namelist, //返回目录列表


int (*filter)(const struct dirent *), //回调函数 过滤目录 NULL表不过滤


int (*compar)(const struct dirent **, const struct dirent **)); //对查询结果排序 NULL表不排序

过滤规则 filter返回0 则不过滤掉 非0则显示


排序规则 compar  >0 排在前面 <0排在后面


已有的排序


int alphasort(const void *a, const void *b);


int versionsort(const void *a, const void *b);

返回值: >=0 目录个数


-1 目录查找失败

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>//exit() int filter(const struct dirent *);
int sort(const struct dirent**,const struct dirent **); int main()
{
struct dirent **d;
//int r = scandir("/home/zhao",&d,filter,alphasort);
int r = scandir("/home/zhao",&d,filter,sort); //与alphasort你序
printf("子目录个数为%d\n",r);
while(*d != 0)
{
printf("%s\n",(*d)->d_name);
d++;
} return 0;
} //过滤掉名字以.开头的文件夹
int filter(const struct dirent* d)
{
if(strncmp(d->d_name,".",1) == 0)
{
return 0;
} return 1;
} int sort(const struct dirent**a,const struct dirent **b)
{
return -alphasort(a,b);
}

LINUX编程学习笔记(十三) 遍历目录的两种方法的更多相关文章

  1. linux系列之: 你知道查看文件空间的两种方法吗?

    目录 简介 du命令 df命令 总结 简介 linux系统中查看文件空间大小应该是一个非常常见的命令了,今天给大家介绍linux系统中查看文件空间的两种方法和在使用中可能会遇到的奇怪问题. 为什么会有 ...

  2. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  3. Linux 编程学习笔记----动笔makefile档

    Befroe Beginning. 在设置暑假的plan ,关于Linux的书籍如今在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 如今開始关于Linux ...

  4. Linux编程学习笔记(二)

    续上个章节,这个章节主要是Linux的远程登录系统操作笔记 一. Linux一般作为服务器使用,但是服务器都是在机房的,所以不可能经常跑到机房去操作系统,所以使用远程登录系统,在Linux的系统一般使 ...

  5. Linux 编程学习笔记----ANSI C 文件I/O管理

    转载请注明出处:http://blog.csdn.net/suool/article/details/38129201 问题引入 文件的种类 依据数据存储的方式不同,能够将文件分为文本文件和二进制文件 ...

  6. LINUX编程学习笔记(十四) 创建进程与 父子进程内存空间

    1什么是进程:进程是一个执行中的程序 执行的程序: 代码->资源->CPU 进程有很多数据维护:进程状态/进程属性 所有进程属性采用的一个树形结构体维护 ps  -a//所有进程 ps - ...

  7. Linux 编程学习笔记----命令行参数处理

    转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行參数及解析 在使用linux时,与windows最大的不同 ...

  8. 链式前向星存树图和遍历它的两种方法【dfs、bfs】

    目录 一.链式前向星存图 二.两种遍历方法 一.链式前向星存图:(n个点,n-1条边) 链式前向星把上面的树图存下来,输入: 9 ///代表要存进去n个点 1 2 ///下面是n-1条边,每条边连接两 ...

  9. C51编程中对单片机绝对地址访问的两种方法

    在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间.C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定.为了能够在C ...

随机推荐

  1. MSSQL - 创建新用户

    1.首先使用Windows身份验证登陆. 2.然后一次打开:安全性--->登录名.右键登录名,点击新建登录名. 3.常规选项卡下:填写登录名.选择SQL Server身份验证,填写登录名密码.取 ...

  2. BZOJ 3173: [Tjoi2013]最长上升子序列( BST + LIS )

    因为是从1~n插入的, 慢插入的对之前的没有影响, 所以我们可以用平衡树维护, 弄出最后的序列然后跑LIS就OK了 O(nlogn) --------------------------------- ...

  3. UML01-概述

    1.UML中的泛化关系用什么符号表示? 2.UML的英文全称是什么? 3.UML图不包括流程图. 4.对一个重要的系统有时要用多个模型就才能充分描述.

  4. ORA-01403: no data found

    在项目的存储过程中有这样一句话 select jgdm,jgmc into parm_mrjgdm,parm_mrjgmc From BL_KHXX  where jgdm=PARM_JGDM; 每次 ...

  5. The parent project must have a packaging type of POM

    在Eclipse中使用Maven添加模块时报错:The parent project must have a packaging type of POM 解决办法: 是将pom.xml 中的  < ...

  6. perl中 wx返回的json需要encode_utf8($d);

    $count is 9 now not support message 51 Wide character in print at /root/scanwx/lib/synccheck.pm line ...

  7. 继承Application实现Android数据共享

         Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...

  8. Spring Tool Suite(简称STS)针对SimpleDateFormat.pase函数的实参值不做检验,异常直接默认值之

    Spring Tool Suite(简称STS)是 Spring 团队开发的一款基于Eclipse的IDE,旨在简化开发Spring MVC 应用的流程.可以自动生成spring相关的配置文件.比如a ...

  9. Android应用公布的准备——渠道注冊与认证

    今天早上申请了一个早上的渠道账号,这工作真是太繁琐,申请的是企业账号,须要营业执照等相关资料,假设申请个人的话预计须要身份证相关信息.以下贴出国内主流的几个渠道.不全然,可是基本上涵盖了大部分. 36 ...

  10. asp.net下利用MVC模式实现Extjs表格增删改查

    在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC ...