1.文件访问测试

  测试调用进程对指定文件是否拥有足够的访问权限

#include <unistd.h>

int access(const char* pathname,int mode);
成功返回0,失败返回 - -pathname:文件路径
-mode:访问权限,可取以下值
R_OK - 可读否
W_OK - 可写否
X_OK - 可执行否
F_OK - 存在否

2.权限掩码: 

   设置调用进程的权限掩码: 

#include <sys/stat.h>

mode_t umask(mode_t cmask);
函数永远成功,返回原来的权限掩码 - cmask :新权限掩码
默认掩码();

3.修改文件权限

    修改指定文件的权限:

#include <sys/stat.h>

int chmod(const char* path,mode_t mode);
int fchmod(int fd,mode_t mode);
成功返回0,失败返回- -path :文件路径
-mode:文件权限
-fd:文件描述符

4.修改文件大小

  指定文件的大小:

    

#include <unistd.h>

int truncate(const char* path,off_t length);
int ftruncate(int fd,off_t length);
成功返回0,失败返回- -path:文件路径
-length:文件大小
-fd:文件描述符

5.内存映射文件

  建立虚拟内存到物理内存或文件的映射

  

#include <sys/mman.h>

void* mmap(void* start,size_t length,int prot,
int flags,int fd,off_t offset);
成功返回映射区内存起始地址,失败返回MAP_FAILED(-) -start:映射区内存起始地址,NULL系统自动选定后返回
-length:映射区字节长度,自动按页(4K)园整
-prot:映射区访问权限,可以取以下值
PROT_READ - 映射区可读
PROT_WRITE -映射区可写
PROT_EXEC -映射区可执行
PROT_NONE -映射区不可访问
-flags:映射标志,可取下值
MAP_ANONYMOUS - 匿名映射,将虚拟内存映射到物理内存而非文件,忽略fd和offset参数
MAP_PRIVATE -对映射区的写操作只反映到缓冲区中,并不会真正写入文件
MAP_SHARED -对映射区的写操作直接反映到文件中
MAP_DENYWRITE -拒绝其他对文件的写操作
MAP_FIXED -若在start上无法创建映射,则失败(无此标志系统会自动调整)
MAP_LOCKED -锁定映射区,保证其不被换出
-offset:文件偏移量

6.解除虚拟内存到物理内存或文件的映射

#include <sys/mman.h>

int munmap(void* start,size_t length);
成功返回0,失败- -start: 映射区内存起始地址,必须是页的首地址
-length:映射区字节长度,自动按页(4K)园整

7.文件硬链接

   创建一个已有硬链接创建一个新的硬链接

#include <unistd.h>

int link(const char* oldpath,const char* newpath);
-oldpath:原始路径
-newpath:新建路径

  删除目录文件里的一个硬链接条目

#include <unistd.h>

int unlink(const char* pathname);
int remove(const char* pathname);
成功返回0,失败-

  修改文件的名字:

#include <stdio.h>

int rename(const char* oldpath,const char* newpath);
成功返回0,失败-

8.符号链接

  

#include <unistd.h>

int symlink(const char* oldpath,const char* newpath);
成功 ,失败- ssize_t readlink(const char* path,char* buf,size_t size); 成功返回拷入buf的符号链接文件的内容的字节数,失败返回-

9.目录的创建

  创建空目录

#include <sys/stat.h>

int mkdir(const char* pathname,mode_t mode);
成功返回0,失败-
--pathname:目录路径
--mode:访问权限,目录的执行权限(x)表示可进入

  删除一个空目录

#include <unistd.h>

int rmdir(const char* pathname);
成功0,失败- -pathname:目录路径

10.当前工作目录

  获取当前工作目录  

#include <unistd.h>

char* getcwd(char* buf,size_t size);

成功返回当前工作目录路径字符串指针,失败返回NULL

-buf:缓冲区
-size:缓冲区大小(字节)

  切换当前工作目录

#include <unistd.h>

int chdir(const char* pathname);
int fchdir(int fd); -path:工作目录路径
-fd:目录工作目录文件描述符(由open函数返回)

11.获取目录内容

  打开目录

#include <dirent.h>

DIR* opendir(const char* name);
DIR* fdopedir(int fd);
成功返回目录流指针,失败返回NULL
-name:目录路径
-fd:目录文件描述符(由open函数返回)

  关闭目录

#include <dirent.h>

int closedir(DIR* dirp);
成功返回0,失败-
-dirp:目录流指针

  读取目录

#include <dirent.h>

struct dirent* readdir(DIR* dirp);
成功返回目录条目指针,读完(不置errno)或失败返回NULL 目录条目结构: struct dirent{
ino_t d_ino; //i节点号
off_t d_off;//下一条目位置
unsingned short d_reclen;//记录长度
unsingned char d_type;//文件类型
char d_name[];//文件名
}; --每个目录中还有两个特殊的条目,其d_name成员的值为“.”,“..”,分别表示该目录本身和其父目录,更目录无父目录 其中表示文件类型的d_type成员,可取以下值
DT_REG -普通文件
DT_DIR -目录
DT_SOCK -本地套节字
DT_CHR -字符设备
DT_BLK -块设备
DT_LNK 符号链接
DT_FIFO 有名管道
DT_UNKNOWN 未知

UNIX C 文件权限 Part2_day01的更多相关文章

  1. 理解Linux文件权限

    任何完整的系统都应该具备有某种形式的安全性.必须用过某种机制来保护文件不被未授权的用户查看或修改:Linux系统遵循了Unix的文件权限的方法,来根据用户与用户组授权,实现文件安全访问. 1.Linu ...

  2. unix文件权限

    一.UNIX下关于文件权限的表示方法和解析 SUID 是 Set User ID, SGID 是 Set Group ID的意思. UNIX下可以用ls -l 命令来看到文件的权限.用ls命令所得到的 ...

  3. linux文件权限表示及用户权限管理

    UNIX/Linux下关于文件执行权限的表示和查看想必是最熟悉不过的,然而你是否真正了解用户文件的权限标识和用户的权限呢? 实际上文件权限标识不仅仅只有U, G, O 11 10 9 8 7 6 5 ...

  4. RHEL7文件权限

    本文介绍Linux下的文件权限 操作系统为RHEL7.2_X86_64 可以从以下三种访问方式限制访问权限: 1 只允许用户自己访问 2 允许一个预先指定的用户组中的用户访问 3 允许系统中的任何用户 ...

  5. Linux文件权限;ACL;Setuid、Setgid、Stick bit特殊权限;sudo提权

    相关学习资料 http://blog.sina.com.cn/s/blog_4e2e6d6a0100g47o.html http://blog.csdn.net/aegoose/article/det ...

  6. 菜鸟学Linux命令:chmod命令和数字文件权限

    chmod是一条在Unix系统中用于控制用户对文件的权限的命令(change mode单词前缀的组合)和函数.只有文件所有者和超级用户可以修改文件或目录的权限.可以使用绝对模式,符号模式指定文件的权限 ...

  7. Linux常用命令_(文件权限)

    Linux权限管理: 二.权限管理1.3种基本权限在Linux中,将使用系统资源的人员分为4类:超级用户.文件或目录的属主.属主的同组人和其他人员.超级用户拥有对Linux系统一切操作权限,对 于其他 ...

  8. Linux 文件权限总结

    在 Linux 中最基本的任务之一就是设置文件权限.理解它们是如何实现的是你进入 Linux 世界的第一步.如您所料,这一基本操作在类 UNIX 操作系统中大同小异.实际上,Linux 文件权限系统就 ...

  9. (大数据工程师学习路径)第一步 Linux 基础入门----用户及文件权限管理

    用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李 ...

随机推荐

  1. PHP array_key_exists()

    定义和用法 array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false. 语法 array_key_exists(ke ...

  2. springmvc 解析xml数据

    springmvc 解析xml数据 http://blog.csdn.net/zhi_jun/article/details/37925475

  3. android 用java代码设置布局、视图View的宽度/高度或自适应

    在achat项目中,对话内容的长宽设置为自适应.可是假设文本内容太多,则宽度几乎相同布满,若自己说的和对方说的都非常多内容.则满屏都是文字.则不easy分辨出是来自别人说的还是自己说的.那么须要对本身 ...

  4. NSDate时间类/NSDateFormatter日期格式类

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // NSDate 时间类 继承自N ...

  5. the solution of CountNonDivisible by Codility

    question:https://codility.com/programmers/lessons/9 To solve this question , I get each element's di ...

  6. zoj 3822 Domination 概率dp 2014牡丹江站D题

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  7. luogu1052 过河

    题目大意 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  8. C语言相关

    标准输入输出 格式化输入输出 int a,b; int arr[10]={1},*p=&b; double d; char ch,str[30]; scanf("%d%d" ...

  9. C# Task 源代码阅读(2)

    上篇已经讲到Task 的默认的TaskScheduler 为ThreadPoolTaskScheduler. 这时我们回到原来的task 的start方法,在代码最后,调用了 ScheduleAndS ...

  10. (Go)10.流程控制示例

    package main import ( "math/rand" "fmt" ) func main() { //var n int n := rand.In ...