io函数,C语言中有什么可重入的ISO标准IO函数

1,C语言中有什么可重入的ISO标准IO函数有的C语言的IO函数都是有缓冲的流,需要有全局变量维护状态,所以一般都是不可重入的 。我的理解 。
2,关于stm32库函数io定义用宏定义,举例如下: #define PA1_H GPIO_SetBits(GPIOA,GPIO_Pin_1)STM32 的bitband功能呀如果是输入的值呢
3,inode的结构对于经验丰富的 UNIX 开发人员或者管理员来说,inode 的结构相对比较简单,但是可能还有一些您尚不了解的、令人惊讶的有关 inode 的内幕 。下面的定义仅给出了 inode 中所包含的、UNIX 用户经常使用的一些重要信息:● inode 编号● 用来识别文件类型,以及用于 stat C 函数的模式信息● 文件的链接数目● 属主的 UID● 属主的组 ID (GID)● 文件的大小● 文件所使用的磁盘块的实际数目● 最近一次修改的时间● 最近一次访问的时间● 最近一次更改的时间从根本上讲,inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外) 。可以在 AIX 的 Header 文件 /usr/include/jf/ino.h 中、或者 Web 页面 中可以找到完整的 inode 结构 。以上所列举的信息对于文件来说非常重要,并且在 UNIX 中频繁使用 。如果没有这些信息,那么文件将被认为遭到破坏和不可用 。与其他的操作系统相比,UNIX 系统中的目录和文件可能看起来有所不同,但事实并非如此 。在 UNIX 中,目录本身就是文件,只是在它们的 inode 中使用了一些附加的设置 。目录 本质上就是一个包含了其他文件的文件 。另外,其模式信息中设置了一些相应的标志,以告知系统该文件实际上是一个目录 。vfslinux非核概念linux部操作都要用vfs相关功能使用者角度vfs进行简单说明使用者需要知道linux哪些文件操作函数需要vfs结构比较清晰解才能更使用例hard link 与symbolic没vfs结构相解搞清楚何使用 本文首先建立简单目录模型介绍该目录vfs结构终总结何使用各文件操作函数 本着简单使用原则主要使用析加猜测鉴于本水平限文免些错误欢迎各位读者理性阅读胆批判您批判我进步力 目录 1 目录模型 2 vfs概念 3 vfs构建 4 vfs结构 5 dentry cache 6 denty定位文件 7 dentry定位文件 8 symbolic link 9 hard link 10 进程文件管理 11 open程 12 open与dup 13 fork打文件影响 14 文件操作函数解析 1 目录模型 面目录例 dir第级目录dirsubdir0与subdir1两目录与文件file0subdir0两文件file1与file0subdir1文件file3 2 vfs概念 vfslinux虚拟文件文件系统称虚拟文件系统交换层(virtual filesystem switch)应用程序员提供层抽象屏蔽底层各种文件系统差异图所示: 同文件系统ext2/3、xfs、fat32等具同结构假用户调用open等文件io函数打文件具体实现非同屏蔽种差异linux引入vfs概念相于linux自建新贮存内存文件系统所其文件系统都需要先转换vfs结构才能用户所调用 3 vfs构建 所谓vfs构建加载实际文件系统程mount调用程图所示mountext2文件系统例 经简化ext2磁盘结构用于说明用构建vfs基本程 mount命令般形式:mount /dev/sdb1 /mnt/mysdb1 /dev/sdb1设备名/mnt/mysdb1挂载点 vfs文件系统基本结构dentry结构体与inode结构体 dentry代表文件目录点目录文件 inode代表磁盘文件与磁盘文件应 inode与dentry定应inode能应dentry项(hard link) mountlinux首先找磁盘区super block通解析磁盘inode table与file data构建自dentry列表与indoe列表 需要注意vfs实际按照ext式进行构建所两者非相似(毕竟extlinux原文件系统) 比inode节点ext与vfs都文件管理结构称inode实际extinode节点磁盘;vfsinode节点内存ext-inode些员变量其实没用引用计数等保留目与vfs-node保持致用ext-inode节点构造vfs-inode节点需要赋值需内存拷贝即 非ext格式磁盘没幸运所mount非ext磁盘慢些 4 vfs结构 构建vfs文件系统步第节提目录模型映射vfs结构体系 文提vfs主要由denty与inode构dentry用于维护vfs目录结构每dentry项代表着我用ls看项(每目录每文件都应着dentry项)inode文件节点与文件应linux目录种文件所dentry应inode节点 图第节目录模型vfs结构 5 dentry cache 每文件都要应inode节点与至少dentry项假设我100g硬盘面写满空文件需要少内存才能重建vfs呢 文件少要占用1block(般4k)假dentry与inode需要100byte则dentry与inode需要占用1/40空间1g硬盘则需要2.5g空间近都始换装1t硬盘需要 25g内存才能放inode与dentry相信没几台电脑承受 避免资源浪费vfs采用dentry cache设计 用户用ls命令查看某目录或用open命令打文件vfs用每目录项与文件建立dentry项与inode即按需创建维护lru(least recently used)列表linux认vfs占用太资源vfs释放掉间没使用dentry项与inode项 需要注意:建立于释放内存占用角度看linux角度看dentry与inodevfs固东西所同vfs否dentry与inode读内存于ext2/3文件系统构建dentry与inode程非简单于其文件系统则慢 解dentry cache概念才能明白何面两种定位文件式 6 denty定位文件 面提denty cachevfs并能保证随都dentry项与inode项用面dentry项与inode项定位式 简化问题假设已经找dirdentry项(找dentry程面讲解) 首先通dir应dentry0找inode0节点inode节点读取目录信息其包含该目录包含级目录与文件文件列表包括name与inode号实际用ls命令查看些信息ls -i显示文件inode号 > ls -i 975248 subdir0 975247 subdir1 975251 file0 根据通根据subdir0应inode号重建inode2并通文件数据(目录文件)与inode2重建subdir0dentry节点:dentry1 > ls -i 975311 file1 975312 file2 接着根据file1应inode号重建inode4并通文件数据与inode4重建file1dentry节点 通inode4节点访问文件 注意:文件应inode号确定inode结构体需要重新构造 7 dentry定位文件 旦dentry cache建立dentry项访问便 dentry关键变量d_subdirs保存级目录列表用于快速定位文件 首先代表dir目录dentry0d_subdirs查找名字subdir0dentry项找dentry1 dentry1查找名字file1dentry项找file1应dentry项 通file1应dentry项获file1应inode4 与dentry项比较dentry项操作精简许 8 symbolic link 建立symboliclink命令 :ln -s 源文件目标文件 linuxsymbolic link类似于windows系统快捷式图所示symlink1指向file1symbolic linksymlink1本身文件自独立inode节点symlink实际存储源文件相路径 部文件操作直接symbolic link指向目标进行操作比open(symlikn1)实际打file3 file3发事情呢open函数照按照symlink1文件路径打文件file3存报错说文件存 9 hard link linux除symbolic linkhard link概念 hard link建立实际dentry项拷贝都指向同inode节点我使用write改写file1内容hardlink1内容改写所实际同文件 图所示hardlink1file1hard link都指向同inode1节点inode1计数器用于记录几dentry项指向删除任意dentry项都导致inode1删除所指向inode1dentry都删除inode1才删除 实际 某种意义讲所dentry项都hard link 10 进程文件管理 进程控制块task_struct两变量与文件关:fs与files files存储着root与pwd两指向dentry项指针用户定路径绝路径通root进行定位;相路径通pwd进行定位(进程root定文件系统根目录比ftp进程根目录文件系统根目录才能保证用户能访问ftp目录内容) fsfile object列表其每节点应着打文件进程定位文件构造file object并通f_inode 关联inode节点文件关闭(close)进程释放应应file objectfile objectf_mode打选择权限f_pos读写位置打同文件每都构造新file object每file object独立f_mode与f_pos 用inode标识比: linuxserver:/etc/zypp # ls -al total 56 drwxr-xr-x 5 root root 4096 apr 2 04:49 . drwxr-xr-x 104 root root 12288 apr 3 08:45 .. drwxr-xr-x 2 root root 4096 apr 2 04:49 credentials.d drwxr-xr-x 2 root root 4096 feb 2 15:55 repos.d drwxr-xr-x 2 root root 4096 may 9 2011 services.d -rw-r--r-- 1 root root 360 apr 23 2011 systemcheck -rw-r--r-- 1 root root 13315 apr 23 2011 zypp.conf -rw-r--r-- 1 root root 4121 may 9 2011 zypper.conf 第二列inode号【io函数,C语言中有什么可重入的ISO标准IO函数】

    推荐阅读