每个运行中的程序被称为进程(process),它有一些与之关联的文件描述符(一些小值整数)。可以通过文件描述符访问打开的文件或设备。

一个程序运行时,一般会有三个文件描述符与之对应

0:标准输入

1:标准输出

2:标准错误

系统的底层文件调用函数,每次执行下列函数,都将进行一次系统调用:

 open
close
write
read

标准IO库 stdio.h

在标准IO库中,与底层文件描述符相对应的是文件流(stream),它被实现为指向结构FILE的指针。标准IO库可以通过缓冲区减少系统调用,达到提高效率与可移植性的目的。

函数:

fopen fclose

fread fwrite

fflush- fseek- fgetc/getc/getchar…

标准库和系统调用为文件和目录的创建和维护提供了全面的支持

chomd 改变文件或目录的访问权限

chown 超级用户用来改变一个文件的属主

unlink/link/symlink系统调用 用来关联与删除文件

创建临时文件的技巧

先用open创建一个文件,然后对其调用unlink,这些文件只有被打开的时候才能被程序使用,程序退出时将被自动删除

mkdir rmdir 创建与删除目录

chdir(const char *path) 程序可以像用户在文件系统里那样刘安目录

getcwd(char *buf, size_t size) 将当前目录的名字写到给定的缓冲区buf里

扫描目录 dirent.h 使用目录流(DIR *)来完成操作

DIR *opendir(const char *name) 打开目录并建立目录流

struct dirent readdir(DIR *dirp) dirent 返回值结构体里包含 文件节点号与文件的名字

long int telldir(DIR *dirp) 返回值记录一个目录流里的当前位置

void seekdir(DIR *dirp,long int loc) 设置目录流的目录项指针

int closedir(DIR *dirp)

错误处理&/proc文件系统

2019年10月22日

11:03

许多系统调用和函数在失败后会设置外部变量erron的值,注意,程序必须在函数报告出错之后立刻检查error变量,以防被其他函数调用所覆盖。 error.h

一些错误处理函数

char *strerror(int errnum); //将错误代码映射为一个字符串,字符串对发生的错误类型进行说明

void perror(const char *s); //将错误代码映射为一个字符串,并将它输出到标准错误输出流

/proc文件系统,目录中包含了许多特殊文件来对驱动程序和内核信息进行更高层的访问,可以通过读写这些驱动文件来获得信息或设置参数。

cat /proc/cpuinfo 列出cpu信息

cat /proc/net/sockstat 统计网络套接字的使用

高级主题 fcntl和mmap (第13章 另外一种共享内存机制 System V)

fcntl 系统调用底层文件描述符提供了更多的操纵方法 <fcntl.h>

mmap 内存映射,允许程序共享内存。建立一段可以被两个或多个程序读写的内存,一个程序对它所作出的修改可以被其他程序看见

mmap 创建一个指向一段内存区域的指针,该内存区域可以通过一个打开的文件描述符访问 与文件的内容相关联

#include<sys/mman.h>

void *mmap(void *addr,size_t len,int port,int flags,int fildes, off_t off)

off 改变经共享内存段访问的文件数据的起始偏移值

fildes 打开的文件描述符 len 可访问的内存长度

port 设置内存段的访问权限(PORT_READ PORT_WRITE PORT_EXEC PORT_NONE)

int msync(void *addr, size_t len, int flags) addr确定位置,len是长度,flags是执行的选项

可选:

MS_ASYNC

异步写方式

MS_SYNC

同步写方式

MS_INVALIDATE

从文件中回读数据

int munmap(coid *addr, size_t len) 释放内存段

最新文章

  1. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法
  2. 史上最全最强SpringMVC详细示例实战教程
  3. 使用jQuery获取Bootstrap Switch的值
  4. crontab使用--linux下的定时任务程序
  5. excel中VBA对多个文件的操作
  6. python网上开发执行环境
  7. 配置WifiConfiguration
  8. ELK 之四:搭建集群处理日PV 四亿次超大访问量优化方法
  9. 经典HTML5小游戏 支持各种浏览器 (围住神经猫)
  10. python 的正则表达式 贪婪模式与懒惰模式
  11. Google 以图搜图 - 相似图片搜索原理 - Java实现 (转)
  12. OpenXml读取word内容(一)
  13. 关于含RecyclerView的fragment来回切换时页面自动滑动到底部的解决方法
  14. Nginx配置反向代理服务器
  15. crm--分页
  16. 详解Linux安装GCC
  17. Nginx与安全体系架构
  18. 电影编码JPEG2000与H.264
  19. C#语言,求成绩平均数。
  20. CentOs 7.3下ELK日志分析系统搭建

热门文章

  1. Math.Atan2 方法
  2. 源码详解系列(七) ------ 全面讲解logback的使用和源码
  3. 自定义BeanDefinitionRegistryPostProcessor注册bean
  4. ios---cocoapods 安装与使用 (AFNetworking为例)
  5. 在 Ubuntu 上安装 K8S教程
  6. day02_数据类型转换、运算符、方法入门
  7. SpringBoot系列专栏
  8. 从App.config中读取数据库连接字符串
  9. JQuery--50个必备的实用jQuery代码段.
  10. oracle11g和12c区别