1. 创建文件夹的函数:
extern int mkdir(_const char *_path,_mode_t _mode);
失败返回-1,成功返回1。
2. 删除文件夹函数:
extern int rmdir(_const char *_path);
失败返回-1,成功返回1。
3. write的系统调用:
#include <unistd.h>
size_t write(int fildes, const void*buf, size_t nbytes);
Example:
write(2, “Here is somedata\n”, 18);
返回值:
-1:写入失败;
非-1:写入字符的个数。
4. read系统调用:
#include <unistd.h>
size_t read(int filedes, void *buf, size_t nbytes);
返回值:
-1:读取出错;
非-1:读入的数据字符个数。
5. open系统调用
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
返回值:返回文件描述符。
oflags:
O_RDONLY | 只读 |
O_WRONLY | 只写 |
O_RDWR | 读写 |
O_APPEND | 追加 |
O_TRUNC | 清除文件再写 |
O_CREAT | 按照mode参数来创建文件 |
O_EXCL | 与O_CREAT模式共同使用,确保创建文件 |
mode:
00700权限 | 代表该文件所有者具有可读、可写及可执行的权限。 | |
S_IRUSR或S_IREAD | 00400权限 | 代表该文件所有者具有可读取的权限。 |
S_IWUSR或S_IWRITE | 00200权限 | 代表该文件所有者具有可写入的权限。 |
S_IXUSR或S_IEXEC | 00100权限 | 代表该文件所有者具有可执行的权限。 |
S_IRWXG | 00070权限 | 代表该文件用户组具有可读、可写及可执行的权限。 |
S_IRGRP | 00040权限 | 代表该文件用户组具有可读的权限。 |
S_IWGRP | 00020权限 | 代表该文件用户组具有可写入的权限。 |
S_IXGRP | 00010权限 | 代表该文件用户组具有可执行的权限。 |
S_IRWXO | 00007权限 | 代表其他用户具有可读、可写及可执行的权限。 |
S_IROTH | 00004权限 | 代表其他用户具有可读的权限 |
S_IWOTH | 00002权限 | 代表其他用户具有可写入的权限。 |
S_IXOTH | 00001权限 | 代表其他用户具有可执行的权限。 |
Example:
Open(“myfile”, O_CREAT,S_IRUSR|S_IXOTH);
6. close系统调用
#include <unistd.h>
int close(int fildes);
返回值:
-1:出错;
0:成功。
7. 设置(一个文件描述符)文件指针的偏移量
#include <unistd,h>
#include <sys/types.h>
off_t lseek(int fildes, off_t offset, int whence);
参数:
fildes:文件描述符;
offset: 要设置文件指针要的位置;
whence:定义偏移值的用法,可取下面值:
SEEK_SET | offset是一个绝对文章 |
SEEK_CUR | offset是一个相对于当前的相对位置 |
SEEK_END | offset是一个相对于文件尾的相对位置 |
8. 文件状态系统调用
#include <unistd.h>
#include <sys/stat.h>
#include <sys/sypes.h>
int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
参数:
fildes:文件描述符
path:路径;
buf:文件信息结构体变量。
其中, 如果路径为链接文件,lstat返回的是链接本身的链接,而stat返回的是链接文件指向文件的信息。
structstat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
unsigned long st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
9. 复制文件描述符,使通过不同的文件描述符访问同一个文件
#include <unistd.h>
int dup(int fildes);
int dup2(int fildes, int fildes2);
10. 向设备发送数据
#include<sys/ioctl.h>
int ioctl(int handle, int cmd,[int *argdx, int argcx]);
功能:控制I/O设备 ,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命令传送的是控制信息,其中的数据是辅助的数据
返回值:成功为0,出错为-1
参数cmd(部分):
#define _IOC_NRBITS 8 //序数(number)字段的字位宽度,8bits
#define _IOC_TYPEBITS 8 //幻数(type)字段的字位宽度,8bits
#define _IOC_SIZEBITS 14 //大小(size)字段的字位宽度,14bits
#define _IOC_DIRBITS 2 //方向(direction)字段的字位宽度,2bits
#define _IOC_NRMASK ((1 <<_IOC_NRBITS)-1) //序数字段的掩码,0x000000FF
#define _IOC_TYPEMASK ((1 <<_IOC_TYPEBITS)-1) //幻数字段的掩码,0x000000FF
#define _IOC_SIZEMASK ((1 <<_IOC_SIZEBITS)-1) //大小字段的掩码,0x00003FFF
#define _IOC_DIRMASK ((1 <<_IOC_DIRBITS)-1) //方向字段的掩码,0x00000003
#define _IOC_NRSHIFT 0 //序数字段在整个字段中的位移,0
#define _IOC_TYPESHIFT(_IOC_NRSHIFT+_IOC_NRBITS) //幻数字段的位移,8
#define _IOC_SIZESHIFT(_IOC_TYPESHIFT+_IOC_TYPEBITS) //大小字段的位移,16
#define _IOC_DIRSHIFT(_IOC_SIZESHIFT+_IOC_SIZEBITS) //方向字段的位移,30
11. 数据同步函数
#include<unistd.h>
int sync(void);
函数说明:此函数负责将系统缓冲区的内容写回磁盘,以确保数据同步
12. 查询文件系统相关的信息
#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path,struct statfs *buf);
intfstatfs(int fd, struct statfs *buf);
参数:
path: 位于需要查询信息的文件系统的文件路径名。
fd: 位于需要查询信息的文件系统的文件描述词。
buf:以下结构体的指针变量,用于储存文件系统相关的信息
struct statfs {
long f_type; /* 文件系统类型 */
long f_bsize; /* 经过优化的传输块大小 */
long f_blocks; /* 文件系统数据块总数 */
long f_bfree; /* 可用块数 */
long f_bavail; /* 非超级用户可获取的块数 */
long f_files; /* 文件结点总数 */
long f_ffree; /* 可用文件结点数 */
fsid_t f_fsid; /* 文件系统标识 */
long f_namelen; /* 文件名的最大长度 */
};
返回值:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值:
EACCES: (statfs())文件或路径名中包含的目录不可访问
EBADF : (fstatfs()) 文件描述词无效
EFAULT :内存地址无效
EINTR :操作由信号中断
EIO :读写出错
ELOOP : (statfs())解释路径名过程中存在太多的符号连接
ENAMETOOLONG:(statfs()) 路径名太长
ENOENT :(statfs()) 文件不存在
ENOMEM :核心内存不足
ENOSYS :文件系统不支持调用
ENOTDIR :(statfs())路径名中当作目录的组件并非目录
EOVERFLOW:信息溢出