apue 第4章 文件和目录
获取文件属性
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h> int stat(const char *pathname, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *pathname, struct stat *buf); #include <fcntl.h>
#include <sys/stat.h> int fstatat(int dirfd, const char *pathname, struct stat *buf, int flags);
返回值:成功0,出错-1
stat结构:
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */ /* Since Linux 2.6, the kernel supports nanosecond
precision for the following timestamp fields.
For the details before Linux 2.6, see NOTES. */
struct timespec st_atim; /* time of last access */
struct timespec st_mtim; /* time of last modification */
struct timespec st_ctim; /* time of last status change */ #define st_atime st_atim.tv_sec /* Backward compatibility */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};
按实际用户ID和实际组ID进行访问权限测试
#include <unistd.h> int access(const char *pathname, int mode); #include <fcntl.h>
#include <unistd.h> int faccessat(int dirfd, const char *pathname, int mode, int flags);
返回值:成功0,出错-1
为进程设置文件模式创建屏蔽字
#include <sys/types.h>
#include <sys/stat.h> mode_t umask(mode_t mask);
返回值:之前文件模式创建屏蔽字
更改现有文件的访问权限
#include <sys/stat.h> int chmod(const char *pathname, mode_t mode);
int fchmod(int fd, mode_t mode); #include <fcntl.h>
#inlcude <sys/stat.h> int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
返回值:成功0,出错-1
用于改变文件的用户ID和组ID。如果两个参数owner或group中的任意一个是-1,则对应ID不变
#include <unistd.h> int chown(const char *pathname, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *pathname, uid_t owner, gid_t group); #include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h> int fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags);
返回值:成功0,出错-1
截断文件
#include <unistd.h>
#include <sys/types.h> int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
返回值:成功0,出错-
创建一个指向现有文件的链接
#include <unistd.h> int link(const char *oldpath, const char *newpath); #include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h> int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
返回值:成功0,出错-
删除一个现有目录项
#include <unistd.h> int unlink(const char *pathname); #include <fcntl.h>
#include <unistd.h> int unlinkat(int dirfd, const char *pathname, int flags);
返回值:成功0,出错-1
解除对一个文件或目录的链接
#include <stdio.h> int remove(const char *pathname);
返回值:成功0,出错-
对文件或目录进行重命名
#include <stdio.h> int rename(const char *oldpath, const char *newpath); #include <fcntl.h>
#include <stdio.h> int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
int renameat2(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, unsigned int flags);
返回值:成功0,出错-
创建一个符号链接
#include <unistd.h> int symlink(const char *target, const char *linkpath); #include <fcntl.h>
#include <unistd.h> int symlinkat(const char *target, int newdirfd, const char *linkpath);
返回值:成功0,出错-
因为open函数跟随符号链接,所以需要一种方法打开链接本身,并读该链接中的名字。
#include <unistd.h> ssize_t readlink(const char *pathname, char *buf, size_t bufsiz); #include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h> ssize_t readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
返回值:成功读取字节数,出错-
一个文件的访问和修改时间可以用以下几个函数更改。futimens和utimensat函数可以指定纳秒级精度的时间戳。
用到数据结构是与stat函数族相同的timespec结构。
#include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h> int utimensat(int dirfd, const char *pathname, const struct timespec times[], int flags); int futimens(int fd, const struct timespec times[]);
返回值:成功0,出错-
创建目录,删除目录
#include <sys/stat.h>
#include <sys/types.h> int mkdir(const char *pathname, mode_t mode); #include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h> int mkdirat(int dirfd, const char *pathname, mode_t mode);
返回值:成功0,出错-1
删除一个空目录,空目录只包含.和..
#include <unistd.h> int rmdir(const char *pathname);
返回值:成功0,出错-
读目录
#include <sys/types.h>
#include <dirent.h> DIR *opendir(const char *name);
DIR *fdopendir(int fd);
返回值:成功指针,出错NULL
struct dirent *readdir(DIR *dirp);
返回值:成功指针,若在目录或出错,返回NULL
void rewinddir(DIR *dirp);
int closedir(DIR *dirp);
返回值:成功0,出错-1
long telldir(DIR *dirp);
返回值:dp关联的目录中的当前位置
void seekdir(DIR *dirp, long loc);
dirent结构
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* not an offset; see NOTES */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all filesystem types */
char d_name[]; /* filename */
};
更改当前目录
#include <unistd.h> int chdir(const char *path);
int fchdri(int fd);
返回值:成功0,出错-1
得到当前工作目录完整绝对路径名
#include <unistd.h> char *getcwd(char *buf, size_t size);
返回值:成功返回buf,出错NULL
apue 第4章 文件和目录的更多相关文章
- APUE第4章 文件和目录
4.2 文件函数 #include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict b ...
- 零基础学Python--------第10章 文件及目录操作
第10章 文件及目录操作 10.1 基本文件操作 在Python中,内置了文件(File)对象.在使用文件对象时,首先需要通过内置的open() 方法创建一个文件对象,然后通过对象提供的方法进行一些基 ...
- apue学习笔记(第四章 文件和目录)
本章将描述文件系统的其他特性和文件的性质. 函数stat.fstat.fstatat和lstat #include <sys/stat.h> int stat(const char *re ...
- 《UNIX环境高级编程》(APUE) 笔记第四章 - 文件和目录
4 - 文件和目录 1. 函数 stat.fstat.fstatat 和 lstat #inlcude <sys/stat.h> int stat(const char *restrict ...
- UNIX环境高级编程 第4章 文件和目录
第三章说明了关于文件I/O的基本函数,主要是针对普通regular类型文件.本章描述文件的属性,除了regular文件还有其他类型的文件. 函数stat.fstat.fstatat和lstat sta ...
- APUE(4)---文件和目录 (3)
十三.函数rename和renameat #include <stdio.h> int rename(const char *oldname, const char *newname); ...
- APUE(4)---文件和目录 (2)
七.函数umask umask函数为进程设置文件模式创建屏蔽字,并返回之前的值,这是少数几个没有出错返回函数中的一个.其中cmask是9个常量(S_IR/W/XUSR.S_IR/W/XGRP.S_IR ...
- APUE学习笔记3——文件和目录
1 简介 之前学习了执行I/O操作的基本函数,主要是围绕普通文件I/O的打开.读或写.下面继续学习Unix文件系统的其他特征和文件的基本性质.我们将从stat函数开始,了解stat结构所代表的文件属性 ...
- Linux命令应用大词典-第 15章 文件、目录权限和属性
15.1 chmod:更改文件和目录的模式 15.2 chown:更改文件和目录的用户所有者和组群所有者 15.3 chgrp:更改文件或目录的所属组 15.4 umask:显示和设置文件及目录创建默 ...
随机推荐
- 从React Native到微服务,落地一个全栈解决方案
Poplar是一个社交主题的内容社区,但自身并不做社区,旨在提供可快速二次开发的开源基础套件.前端基于React Native与Redux构建,后端由Spring Boot.Dubbo.Zookeep ...
- python 简单抓取网页并写入excel实例
# -*- coding: UTF-8 -*- import requests from bs4 import BeautifulSoup import xlwt import time #获取第一页 ...
- truncate与delete删除数据的区别
- NOIp 数据结构专题总结 (2):分块、树状数组、线段树
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) 分块 阅:<「分块」数列分块入门 1-9 by hzwer> 树状数组 Binary Indexed T ...
- 如何保留小数点后N位?
2014年10月17日09:48:39 在做项目中遇到的,要把想显示的数据进行规定小数位的保留,下面写一下用过的方法: 1. BigDecimal 方法(我做项目的时候用的方法) 代码: java.m ...
- Visual Studio Code-调试Node.js代码
打开js文件 F0下断点 F5调试 PS:配置了launch.json会默认执行调试配置的js
- springboot 尚桂谷学习笔记03
------spring boot 与日志------ 日志框架: 市面上的日志框架: jul jcl jboss-logging logback log4j log4j2 ...... 左边一个门面 ...
- vue中修改了数据但视图无法更新的情况(转)
原文地址:https://blog.csdn.net/qq_39985511/article/details/79778806
- 爬虫(一)—— 请求库(一)requests请求库
目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...
- samba 添加新用户
添加samba新用户需要有root权限 1. 在Linux服务器根目录下(黄色背景部分是需替换部分:换成你自己的用户名) sudo smbpasswd -a username 2. 修改samba配置 ...