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(用户空间设备管理)。

posted on 2022-07-19 14:32  WORMARZ  阅读(101)  评论(0)    收藏  举报