博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX C 文件权限 Part2_day01
阅读量:4681 次
发布时间:2019-06-09

本文共 3312 字,大约阅读时间需要 11 分钟。

1.文件访问测试

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

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

 

2.权限掩码: 

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

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

 

3.修改文件权限

    修改指定文件的权限:

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

 

4.修改文件大小

  指定文件的大小:

    

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

 

5.内存映射文件

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

  

#include 
void* mmap(void* start,size_t length,int prot, int flags,int fd,off_t offset); 成功返回映射区内存起始地址,失败返回MAP_FAILED(-1)-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 
int munmap(void* start,size_t length); 成功返回0,失败-1-start: 映射区内存起始地址,必须是页的首地址-length:映射区字节长度,自动按页(4K)园整

 

7.文件硬链接

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

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

 

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

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

   修改文件的名字:

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

 

8.符号链接

  

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

 

9.目录的创建

  创建空目录

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

 

 

  删除一个空目录

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

 

 

10.当前工作目录

  获取当前工作目录  

#include 
char* getcwd(char* buf,size_t size);成功返回当前工作目录路径字符串指针,失败返回NULL-buf:缓冲区-size:缓冲区大小(字节)

 

  切换当前工作目录

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

 

11.获取目录内容

  打开目录

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

 

  关闭目录

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

 

  读取目录

#include 
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[256];//文件名};--每个目录中还有两个特殊的条目,其d_name成员的值为“.”,“..”,分别表示该目录本身和其父目录,更目录无父目录其中表示文件类型的d_type成员,可取以下值DT_REG -普通文件DT_DIR -目录DT_SOCK -本地套节字DT_CHR -字符设备DT_BLK -块设备DT_LNK 符号链接DT_FIFO 有名管道DT_UNKNOWN 未知

 

转载于:https://www.cnblogs.com/Kernel001/p/7802080.html

你可能感兴趣的文章
前端资源链接 ...
查看>>
yum install ntp 报错:Error: Package: ntp-4.2.6p5-25.el7.centos.2.x86_64 (base)
查看>>
leetcode-Single Number-136
查看>>
CF715C Digit Tree
查看>>
二分法练习1
查看>>
QT 制作串口调试小助手----(小白篇)
查看>>
前端MVC实践之hellorocket——by张舒彤
查看>>
OptimalSolution(2)--二叉树问题(3)Path路径问题
查看>>
IPC 之 Messenger 的使用
查看>>
macos 下usb键盘问题.
查看>>
SQL函数学习(十六):STUFF()函数
查看>>
Apache Hadoop 和Hadoop生态圈
查看>>
Ctrl+Enter 选中文本提交
查看>>
android WIFI
查看>>
常用的匹配正则表达式和实例
查看>>
小组成员及其git链接
查看>>
SQL case when else
查看>>
MVc Identity登陆锁定
查看>>
cdn连接失败是什么意思_关于CDN的原理、术语和应用场景那些事
查看>>
ultraedit26 运行的是试用模式_免费试用U盘数据恢复工具 – 轻松找回U盘丢失的各种数据!...
查看>>