首页 / LINUX / Linux相关知识点
Linux相关知识点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux相关知识点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3416字,纯文字阅读大概需要5分钟。
内容图文
![Linux相关知识点](/upload/InfoBanner/zyjiaocheng/1179/8f6aed13e1464f899bbdbfd691c46063.jpg)
每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针 , 已打开的文件在内核中用 file 结构体表示,文件描述符表中的指针指向 file 结构体。 struct file 结构体定义在 include/linux/fs.h 中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file 。
struct file
的最重要成员
1.mode_t f_mode;
文件模式确定文件是可读的或者是可写的
(
或者都是
),
通过位
FMODE_READ
和
FMODE_WRITE.
你可能想在你的
open
或者
ioctl
函数中检查这个成员的读写许可
,
但是不需要检查读写许可
,
因为内核在调用你的方法之前检查
.
当文件还没有为那种存取而打开时读或写的企图被拒绝
,
驱动甚至不知道这个情况
.
2.loff_t f_pos;
当前读写位置
. loff_t
在所有平台都是
64
位
(
在
gcc
术语里是
long long ).
驱动可以读这个值
,
如果它需要知道文件中的当前位置
,
但是正常地不应该改变它
;
读和写应当使用它们作为最后参数而收到的指针来更新一个位置
,
代替直接作用于
filp->f_pos.
这个规则的一个例外是在
llseek
方法中
,
它的目的就是改变文件位置
.
3.unsigned int f_flags;
这些是文件标志
,
例如
O_RDONLY, O_NONBLOCK,
和
O_SYNC.
驱动应当检查
O_NONBLOCK
标志来看是否是请求非阻塞操作
;
其他标志很少使用
.
特别地
,
应当检查读
/
写许可
,
使用
f_mode
而不是
f_flags.
所有的标志在头文件
<linux/fcntl.h>
中定义
.
4.struct file_operations *f_op;
和文件关联的操作
.
内核安排指针作为它的
open
实现的一部分
,
接着读取它当它需要分派任何的操作时
. filp->f_op
中的值从不由内核保存为后面的引用
;
这意味着你可改变你的文件关联的文件操作
,
在你返回调用者之后新方法会起作用
.
例如
,
关联到主编号
1 (/dev/null, /dev/zero,
等等
)
的
open
代码根据打开的次编号来替代
filp->f_op
中的操作
.
这个做法允许实现几种行为
,
在同一个主编号下而不必在每个系统调用中引入开销
.
替换文件操作的能力是面向
对象编程的
"
方法重载
"
的内核对等体
.
5.void *private_data;
open
系统调用设置这个指针为
NULL,
在为驱动调用
open
方法之前
.
你可自由使用这个成员或者忽略它
;
你可以使用这个成员来指向分配的数据
,
但是接着你必须记住在内核销毁文件结构之前
,
在
release
方法中释放那个内存
. private_data
是一个有用的资源
,
在系统调用间保留状态信息
,
我们大部分例子模块都使用它
.
6.struct dentry *f_dentry;
关联到文件的目录入口( dentry )
结构
.
设备驱动编写者正常地不需要关心
dentry
结构
,
除了作为
filp->f_dentry->d_inode
存取
inode
结构
.
struct inode── 字符设备驱动相关的重要结构介绍
内核中用 inode 结构表示具体的文件,而用 file 结构表示打开的文件描述符。
inode 结构体
内核使用 inode 结构在内部表示文件。 inode 一般作为 file_operations 结构中函数的参数传递过来。例如, open() 函数将传递一个 inode 指针进来,表示目前打开的文件结点。需要注意的是, inode 的成员已经被系统赋予了合适的值,驱动程序只需要使用该结点中的信息,而不用更改。
inode 结构中包含大量的有关文件的信息
Linux链接概念
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
硬链接文件有两个限制
1)
、不允许给目录创建硬链接;
2)
、只有在同一文件系统中的文件之间才能创建链接。
对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。
这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。
【软连接】
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见 图 2.)。因此软链接的创建与使用没有类似硬链接的诸多限制:
软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode
1).删除符号连接f3,对f1,f2无影响;
2).删除硬连接f2,对f1,f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。
在for循环里面创建进程的规律:2 6 14 30......前一个的进程数加上2的n次方。
return 和 exit的区别:
在Vfork下,子进程return的话会修改父进程的指令寄存器,因为他们公用地址空间,所以父进程又会从main函数开始重新执行。exit直接结束进程。
原文:http://10706198.blog.51cto.com/10696198/1760205
内容总结
以上是互联网集市为您收集整理的Linux相关知识点全部内容,希望文章能够帮你解决Linux相关知识点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。