当前位置:七道奇文章资讯系统安全Linux安全
日期:2011-09-21 10:13:00  来源:本站整理

unix/linux文件属性及其系统调用[Linux安全]

赞助商链接



  本文“unix/linux文件属性及其系统调用[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

TABLE 1. 获得文件属性(stat,fstat,lstat)

2. 文件范例2.1 文件范例包含一下几种2.2 文件范例测试的宏2.3 文件范例测试实例3. 文件的权限3.2 关于权限的小细节3.3 设置用户ID和设置组ID 3.4 文件权限操作的系统调用3.4.1 umask函数3.4.2 chmod和fchmod 3.4.3 chown fchown和lchown 4. 文件的时间4.1 utime函数

文件有其属性,如范例,权限,长度,状况等,本文将对此举行总结,同时学习相关的系统调用.

1. 获得文件属性(stat,fstat,lstat)

三个stat函数可以返回文件的信息.

以下内容为程序代码 以下内容为程序代码
#include

int stat(const char *pathname, struct stat *buf);int fstat(int filedes, struct stat *buf);int lstat(const char *pathname, struct stat *buf);返回值:成功 0失利 -1

三个函数的辨别是,stat 第一个参数是文件名,fstat 第一个参数文件描写符,lstat 第一参数是文件名,且他返回的是标记链接的信息,而不是标记链接引用文件的信息.

第二个参数buf构造体指针,是一个我们必须供应的构造.其基本的情势:struct stat { mode_t st_mode; /* 文件范例和文件权限 */ ino_t st_ino; /* 与该文件关联的inode */ dev_t st_dev; /* 保存的文件设备 */ nlink_t st_nlink; /* 该文件上硬链接的个数 */ uid_t st_uid; /* 文件属主UID */ gid_t st_gid; /* 文件属主GID */ off_t st_size; /* 文件字节数,普通文件有效 */ time_t st_atime; /* 文件上一次被拜候的时间 */ time_t st_mtime; /* 文件内容上一次被改正的时间 */ time_t st_ctime; /* 文件权限、属主、组或内容上一次被改正的时间 */ }利用stat函数最多的大概是`ls -l`号令,来获得一个文件的全部信息.下面我们就按照stat的内容来理解文件属性信息.

2. 文件范例构造体stat的st_mode里就有文件范例的信息(st_mode同时包含文件范例和文件权限).

2.1 文件范例包含一下几种1. 普通文件/regular file.最长用的文件范例.数据可以是文本也可以是二进制文件,对unix内核来说没有辨别.

2. 目录文件/directory file.这种文件包含了其他文件的名字和指向这些文件有关信息的指针.

3. 块特别文件/block special file.这种文件范例供应对设备带缓冲的拜候.每次拜候以固定长度为单位举行.

4. 字符特别文件/ character special file这种文件范例供应对设备不带缓冲的拜候.每次拜候长度可变.

5. FIFO这种范例文件用于进程间通信,也成为命名管道.

6. 套接字 / socket这种文件范例用于进程间的网络通信.

7. 标记链接 / sysbolic link这种范例文件指向另一个文件.

2.2 文件范例测试的宏关于一个文件,可以用下面的宏来肯定文件范例.这些宏的参数是 stat中的st_mode成员.

S_ISREG() 测试能否是普通文件S_ISDIR() 测试能否是目录文件S_ISBLK() 测试能否是块特别文件S_ISCHR() 测试能否是字符特别文件S_ISFIFO() 测试能否管道S_ISSOCK() 测试是套接子S_ISLNK() 测试能否是链接文件

2.3 文件范例测试实例

以下内容为程序代码 以下内容为程序代码
filename: file_type.c #include #include #include #include

int main(int argc, char *argv[])

{ int ret;int i;struct stat stat_buf;char *p_file_type;

for (i = 1; i < argc; i++) { if ((ret = lstat(argv[i], &stat_buf)) == -1) { fprintf(stderr, "%s ——> lstat error!\n", argv[i]);continue;} if (S_ISREG(stat_buf.st_mode))

p_file_type = "regular";else if (S_ISDIR(stat_buf.st_mode))

p_file_type = "dir";else if (S_ISCHR(stat_buf.st_mode))

p_file_type = "character special";else if (S_ISBLK(stat_buf.st_mode))

p_file_type = "block special";else if (S_ISLNK(stat_buf.st_mode))

p_file_type = "symbolic link";else if (S_ISFIFO(stat_buf.st_mode))

p_file_type = "fifo";else if (S_ISSOCK(stat_buf.st_mode))

p_file_type = "socket";else p_file_type = "unknow";printf("%s ——> %s\n",argv[i], p_file_type);}

return 0;}

测试[code] [test@test stat_code]$ ./file_type /dev/initctl /etc/passwd /dev/sda /dev/tty /dev/log /dev/cdrom /dev/initctl ——> fifo /etc/passwd ——> regular /dev/sda ——> block special /dev/tty ——> character special /dev/log ——> socket /dev   以上是“unix/linux文件属性及其系统调用[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • unix/linux文件属性及其系统调用
  • 在Linux/Unix平台下安装MySQL
  • Win32版与Unix版MySQL对比
  • 在UNIX系统下安装MySQL
  • <b>Linux/UNIX 下的有效的号令dd</b>
  • <b>Unix主机漏洞扫描器的计划与实现</b>
  • 管理Java类途径(UNIX和Mac OS X)
  • Java加密:Unix尺度加密办法
  • <b>用ROOT远程登陆UNIX系统和防备办法</b>
  • <b>若何用ROOT远程登陆UNIX系统和防备办法</b>
  • <b>其实Unix很简单</b>
  • <b>在Unix/Linux安装FastCGI</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .