Linux 系统调用
1. 创建
创建新文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(const char *pathname, mode_t mode);
pathname文件路径字符串mode新建文件的存取权限
2.打开
打开文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname文件路径字符串flags打开文件所采用的操作mode打开文件的存取权限
flags
| 标志 | 含义 |
|---|---|
| O_RDONLY | 只读模式 |
| O_WRONLY | 只写模式 |
| O_RDWR | 可读可写 |
| ******** | 以下的常量是选用的,这些选项是用来和上面的必选项进行按位或起来作为flags参数 |
| O_APPEND | 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾 |
| O_CREAT | 表示如果指定文件不存在,则创建这个文件 |
| O_EXEC | 表示如果要创建的文件已存在,则出错,同时返回 -1,并且修改 errno 的值 |
| O_TRUNC | 如果文件存在,删除文件内容 |
| O_NONBLOCK | 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式 |
| O_NOCTTY | 如果路径名指向终端设备,不要把这个设备用作控制终端 |
3、读写
读写open()打开的文件,并返回实际读写的字节数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
buf指向缓冲区的指针count缓冲区大小,以字节为单位
4、定位文件读写位置
将文件读写指针相对whence移动offset个字节。操作成功时返回文件指针相对于文件头的位置。
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
offset文件指针移动的相对位置,可以为负值whence文件指针移动参考位置
whence可选常量
| 标志 | 含义 |
|---|---|
| SEEK_SET | 相对文件开头 |
| SEEK_CUR | 相对文件读写指针的当前位置 |
| SEEK_END | 相对文件末尾 |
5、关闭
#include <unistd.h>
int close(int fd);
fd要关闭的文件描述符
c标准库
1、打开
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
pathname文件mode打开模式
fopen mode 与 open flages对比
┌─────────────┬───────────────────────────────┐
│fopen() mode │ open() flags │
├─────────────┼───────────────────────────────┤
│ r │ O_RDONLY │
├─────────────┼───────────────────────────────┤
│ w │ O_WRONLY | O_CREAT | O_TRUNC │
├─────────────┼───────────────────────────────┤
│ a │ O_WRONLY | O_CREAT | O_APPEND │
├─────────────┼───────────────────────────────┤
│ r+ │ O_RDWR │
├─────────────┼───────────────────────────────┤
│ w+ │ O_RDWR | O_CREAT | O_TRUNC │
├─────────────┼───────────────────────────────┤
│ a+ │ O_RDWR | O_CREAT | O_APPEND │
└─────────────┴───────────────────────────────┘
2、读写
c 标准库支持多种读写方式

3、定位文件读写位置
int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
int fseek(FILE *stream, long int offset, int whence);
pos这是指向 fpos_t 对象的指针,该对象包含了之前通过 fgetpos 获得的位置fseek用法同lseek
4、关闭
int fclose(FILE *stream)
Linux 文件系统框架


特殊文件
1 /proc
/proc 文件目录是一个伪文件,它只存在于系统内存中,而不占用外存空间。它以文件系统的方式为用户提供访问内核数据的操作接口。目录下主要包含进程和状态的信息。详见Linux /proc 目录
2 /sys
Linux 2.6以后的内核支持sysfs文件系统被映射到此目录上。Linux设备的驱动模型中的总线、驱动和设备都可以在sysfs文件系统中找到对应文件节点。
3 /dev
devfs(设备文件系统)在Linux 2.4 内核被引入,它使得设备驱动程序能自主的管理自己的设备文件。devfs可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载设备时删除它。在Linux 2.6内核中,devfs被认为是过时的方案,最终被抛弃。取代它的是udev(用户空间设备管理)。
浙公网安备 33010602011771号