每个运行中的程序被称为进程(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) 释放内存段

Linux文件结构-底层文件访问&文件目录和维护的更多相关文章

  1. linux文件系统操作——底层文件访问

        在不使用标准I/O的情况下,使用write,read,open实现对文件的复制操作,这些调用都是直接使用底层系统调用,完成从用户代码到内核代码的切换,消耗大量的系统资源,今天对此进行研究主要是 ...

  2. scp 从另一台linux服务器拷贝文件或文件目录

    格式:scp [参数] [原路径] [目标路径] download 使用方法:scp -r root@127.0.0.1:/opt/soft/test /opt/soft/ scp -r 用户名@IP ...

  3. Linux系统编程@文件操作(一)

    只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...

  4. [apue] linux 文件访问权限那些事儿

    前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访 ...

  5. linux文件访问权限(像rw-r--rw-是什么意思)

    Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该目录 可用 ls -l 查看文件 像上图的-rw-r--rw- ...

  6. linux测试noatime对文件访问时间的影响

    linux测试noatime对文件访问时间的影响 文件(如abc)有3个时间: # stat abc Access: 2015-04-16 19:30:13.665970572 +0800 Modif ...

  7. Linux中ls -l(ll)返回结果中的文件访问权限-rw-r--rw-

    linux文件访问权限(像rw-r--rw-是什么意思)   Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该 ...

  8. 在linux和Mac中访问某个文件夹中所有的文件

    在linux和Mac中访问某个文件夹中所有的文件——输出所有的文件名 #include <stdio.h> #include <dirent.h> int main() { s ...

  9. Linux文件访问流程及磁盘inode和block总结

    Linux文件访问流程 inode是文件的唯一标识,文件名和inode的对应关系存放在上一级目录的block中:inode里有指向文件block的指针和文件的属性,从而通过block获得文件数据. 磁 ...

随机推荐

  1. 高精度算法(C/C++)

    高精度算法 (C/C++) 做ACM题的时候,经常遇到大数的加减乘除,乘幂,阶乘的计算,这时给定的数据类型往往不够表示最后结果,这时就需要用到高精度算法.高精度算法的本质是把大数拆成若干固定长度的块, ...

  2. Excel Application操作指南

    概述 Application对象是Microsoft Office Excel 2007对象模型中最高级别的对象,表示Excel程序自身.Application对象提供正在运行的程序的信息.应用于程序 ...

  3. 靶机-SickOs 1.2 Walkthrough

    SickOs:1.2 https://www.vulnhub.com/entry/sickos-12,144/ 参考:https://www.cnblogs.com/yuzly/p/10854392. ...

  4. 改进Zhang Suen细化算法的C#实现

    本文主要实现了改进Zhang Suen细化算法的C#实现,相关论文 :“牟少敏,杜海洋,苏平,查绪恒,陈光艺.一种改进的快速并行细化算法[J].微电子学与计算机,2013,(第1期)” .这篇论文中关 ...

  5. ios---photo实现保存图片到自定义相册

    #import "XMGSeeBigPictureViewController.h" #import "XMGTopic.h" #import <SVPr ...

  6. 【置顶】入驻百家号【九哥聊IT】和【九哥九嫂小日子】,欢迎关注

    欢迎大家关注. 1.关注百家号[九哥聊IT],每天专注讲解互联网最新资讯和知识分享.2.关注百家号[九哥九嫂小日子],带你看下班之外的九哥.

  7. laravel 工厂模式到容器

    下面实现了查人拥有超能力的三种方式 第一种最基本的类引用实现 1 <?php /** * 目的:代码的完善来说明从 基础类的调用到 工厂类的使用 再到容器的出现的原因 * (首先要明白工厂类和容 ...

  8. 深入理解Java虚拟机内存模型

    前言 本文中部分内容引用至<深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)>第12章,如果有兴趣可自行深入阅读,文末放有书籍PDF版本连接. 一.物理机中的并发 物理机遇到的并 ...

  9. maven 打包详解

    Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...

  10. 【编程的乐趣-用python解算法谜题系列】谜题一 保持一致

    谜题一 保持一致 谜题 假设有一大群人排队等待观看棒球比赛.他们都是主场球迷,每个人都戴着队帽,但不是所有人都用同一种戴法,有些人正着戴,有些人反着戴. 假定你是保安,只有在全组球迷帽子戴法一致时才能 ...