1.文件访问测试
测试调用进程对指定文件是否拥有足够的访问权限
#includeint access(const char* pathname,int mode); 成功返回0,失败返回 -1 -pathname:文件路径 -mode:访问权限,可取以下值 R_OK - 可读否 W_OK - 可写否 X_OK - 可执行否 F_OK - 存在否
2.权限掩码:
设置调用进程的权限掩码:
#includemode_t umask(mode_t cmask); 函数永远成功,返回原来的权限掩码 - cmask :新权限掩码 默认掩码(0022);
3.修改文件权限
修改指定文件的权限:
#includeint chmod(const char* path,mode_t mode);int fchmod(int fd,mode_t mode); 成功返回0,失败返回-1-path :文件路径-mode:文件权限-fd:文件描述符
4.修改文件大小
指定文件的大小:
#includeint truncate(const char* path,off_t length);int ftruncate(int fd,off_t length); 成功返回0,失败返回-1-path:文件路径-length:文件大小-fd:文件描述符
5.内存映射文件
建立虚拟内存到物理内存或文件的映射
#includevoid* 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.解除虚拟内存到物理内存或文件的映射
#includeint munmap(void* start,size_t length); 成功返回0,失败-1-start: 映射区内存起始地址,必须是页的首地址-length:映射区字节长度,自动按页(4K)园整
7.文件硬链接
创建一个已有硬链接创建一个新的硬链接
#includeint link(const char* oldpath,const char* newpath);-oldpath:原始路径-newpath:新建路径
删除目录文件里的一个硬链接条目
#includeint unlink(const char* pathname); int remove(const char* pathname); 成功返回0,失败-1
修改文件的名字:
#includeint rename(const char* oldpath,const char* newpath);成功返回0,失败-1
8.符号链接
#includeint symlink(const char* oldpath,const char* newpath); 成功 0,失败-1ssize_t readlink(const char* path,char* buf,size_t size); 成功返回拷入buf的符号链接文件的内容的字节数,失败返回-1
9.目录的创建
创建空目录
#includeint mkdir(const char* pathname,mode_t mode); 成功返回0,失败-1--pathname:目录路径--mode:访问权限,目录的执行权限(x)表示可进入
删除一个空目录
#includeint rmdir(const char* pathname);成功0,失败-1-pathname:目录路径
10.当前工作目录
获取当前工作目录
#includechar* getcwd(char* buf,size_t size);成功返回当前工作目录路径字符串指针,失败返回NULL-buf:缓冲区-size:缓冲区大小(字节)
切换当前工作目录
#includeint chdir(const char* pathname);int fchdir(int fd);-path:工作目录路径-fd:目录工作目录文件描述符(由open函数返回)
11.获取目录内容
打开目录
#includeDIR* opendir(const char* name);DIR* fdopedir(int fd); 成功返回目录流指针,失败返回NULL-name:目录路径-fd:目录文件描述符(由open函数返回)
关闭目录
#includeint closedir(DIR* dirp); 成功返回0,失败-1-dirp:目录流指针
读取目录
#includestruct 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 未知