Linux文件结构-底层文件访问&文件目录和维护
每个运行中的程序被称为进程(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文件结构-底层文件访问&文件目录和维护的更多相关文章
- linux文件系统操作——底层文件访问
在不使用标准I/O的情况下,使用write,read,open实现对文件的复制操作,这些调用都是直接使用底层系统调用,完成从用户代码到内核代码的切换,消耗大量的系统资源,今天对此进行研究主要是 ...
- scp 从另一台linux服务器拷贝文件或文件目录
格式:scp [参数] [原路径] [目标路径] download 使用方法:scp -r root@127.0.0.1:/opt/soft/test /opt/soft/ scp -r 用户名@IP ...
- Linux系统编程@文件操作(一)
只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...
- [apue] linux 文件访问权限那些事儿
前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访 ...
- linux文件访问权限(像rw-r--rw-是什么意思)
Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该目录 可用 ls -l 查看文件 像上图的-rw-r--rw- ...
- linux测试noatime对文件访问时间的影响
linux测试noatime对文件访问时间的影响 文件(如abc)有3个时间: # stat abc Access: 2015-04-16 19:30:13.665970572 +0800 Modif ...
- Linux中ls -l(ll)返回结果中的文件访问权限-rw-r--rw-
linux文件访问权限(像rw-r--rw-是什么意思) Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该 ...
- 在linux和Mac中访问某个文件夹中所有的文件
在linux和Mac中访问某个文件夹中所有的文件——输出所有的文件名 #include <stdio.h> #include <dirent.h> int main() { s ...
- Linux文件访问流程及磁盘inode和block总结
Linux文件访问流程 inode是文件的唯一标识,文件名和inode的对应关系存放在上一级目录的block中:inode里有指向文件block的指针和文件的属性,从而通过block获得文件数据. 磁 ...
随机推荐
- 9.Super详解
super注意点: surper()是调用父类的构造方法,而且必须在构造方法的第一个 super必须只能出现在子类的方法或者构造方法中! super()和this()不能同时调用构造方法! Vs th ...
- lisp学习总结(一)
lisp太简单 lisp核心太简单了只有几个简单的逻辑定理,简单到你会认为他啥事都做不了. lisp语法太简单了,只有符号,参数,以及括号,组成一种万能的表达式. 由于上述lisp的简单,所以对于初学 ...
- [白话解析] 深入浅出支持向量机(SVM)之核函数
[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...
- 同一个环境同时使用python2和python3的方法
1.首先安装好p2和p3,配置好环境变量.在CMD内执行python返回版本号,返回结果根据配置的环境变量而定,如果p2的环境变量配置在前面,则返回p2的版本号,反之则p3 2.然后把各版本目录下的p ...
- [SDOI2011]染色(树链剖分)
[SDOI2011]染色(luogu) Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段 ...
- ffplay的使用
https://www.cnblogs.com/renhui/p/8458802.html
- postman发送请求的简单操作
发送请求常用的是post和get 两者的区别是: 1.post比get安全,因为参数直接暴露在url中,不能用来传递敏感信息 2.get参数通过url传递,post放在request body中 3. ...
- not,and,or
sql语句中not and or的执行优先级从高到低依次为:not>and>or <> 不等于
- GDI+如何判断一个点是否在区域内
https://msdn.microsoft.com/en-us/library/windows/desktop/ms533826(v=vs.85).aspx The purpose of hit t ...
- GetWindowRect与GetClientRect 的区别
GetWindowRect 函数功能:该函数返回指定窗口的边框矩形的尺寸.该尺寸以相对于屏幕坐标左上角的屏幕坐标给出. 函数原型:BOOL GetWindowRect(HWND hWnd,LPRECT ...