文件句柄备忘

句柄是什么?

Handle本身是一个32位的无符号整数,它用来代表一个内核对象。它并不指向实际的内核对象。
句柄不是指针,但利用句柄能够得到一段内存地址,
句柄的设计目标是防止用户随意修改内核中文件,因此用户模式下的程序永远不可能获得一个内核对象的实际地址(一般情况下)。

那么Handle的意义何在?
它实际上是作为一个索引在一个表中查找对应的内核对象的实际地址。

那么这个表在哪里呢?
每个进程都有这样的一个表,叫句柄表。
该表的第一项就是进程自己的句柄,这也是为什么你调用GetCurrentProcess()总是返回0x7FFFFFFF原因。

简单地说,Handle就是一种用来"间接"代表一个内核对象的整数值。你可以在程序中使用handle来代表你想要操作的内核对象。这里的内核对象包括:事件(Event)、线程、进程、Mutex等等。我们最常见的就是文件句柄(file handle)。

 

linux 中通常默认都只能够同时打开 1024 个文件。

通常 linux 系统中文件打开的设定分成系统级别设定及用户级别设定
常见的文件限制令系统产生下面错误
 Socket/File: Can‘t open so many files

系统级别定义方法
 /etc/sysctl.conf 或 /proc/sys/fs/file-max

用户级别定义方法
 /etc/security/limits.conf 或 ulimit 命令

 

查询进程打开文件的方法, 以当前 ssh 链接到服务器的终端作为例子, 先查询到进程号

ps aux | grep pts/0 | grep ssh | grep -v grep | awk '{print $2}'
1859

利用 lsof 查询当前进程打开的文件数量 
lsof -p 1859  | wc -l (直接查询当前进程)
59

lsof -n | grep 1859 | wc -l  (查询整个系统中打开的文件再执行过滤)
58

查询某个文件被什么进程使用中的方法

lsof -f -- /lib/security/pam_keyinit.so
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
login   1019 root mem    REG    8,1     5740 133255 /lib/security/pam_keyinit.so
sshd    1859 root mem    REG    8,1     5740 133255 /lib/security/pam_keyinit.so
sshd    4468 root mem    REG    8,1     5740 133255 /lib/security/pam_keyinit.so

查询分区打开文件方法
[root@station11 proc]# lsof +f -- /dev/sda1 | head -5
COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1      root  cwd    DIR    8,1     4096      2 /
init         1      root  rtd    DIR    8,1     4096      2 /
init         1      root  txt    REG    8,1   145180 139646 /sbin/init
init         1      root  mem    REG    8,1   122232 162307 /lib/libgcc_s-4.4.5-20110214.so.1

时间: 2024-07-28 15:23:49

文件句柄备忘的相关文章

在Eclipse中构建备忘单

Eclipse提供了一种用于显示迷你型指南的内置机制,称为备忘单(cheat sheet).备忘单可以快速而有效地指导您如何在Eclipse中执行包含多个步骤的过程,它显示在工作台的边角处,您可以容易且快速地查看它们. 本教程演示了如何为Eclipse构造备忘单.构造完毕之后,它们还可以运行在BEA Workshop Studio.BEA Workshop for WebLogic和其他任何Eclipse系统之上,或许能对您现有的工具和插件进行补充.示例下载中提供了3个准备好的备忘单,其中一个备

Oracle数据库如何手动恢复备忘日志

最近因为升级了Mac os x 10.10 Yosemite,突然前几天的一个晚上,开机发现就停留在开机界面了,看来BETA果然是不靠谱,然后想到自己这不前几天刚备份完吗,没事,TimeMachine是何等神器,二话不说直接恢复.但是恢复完,我后悔了,一来是忘了昨天晚上还加班呢,加班的成功保留成果所剩无几,关键我这才发现TimeMachine既然不备份虚拟机文件(虚拟机文件30G,估计直接给略过了吧),难怪每次都觉得备份那么快. 不过后悔也没用,重新搭开发环境吧.操作系统WIN7->开发工具VS

JDBC事务编程模型备忘

在Spring一统天下的情况下,JDBC快没有生存余地了.不过JDBC还是Java操作数据库的基础,现在Java项目中JDBC的应用快绝迹了,有必要对JDBC的事务编程模型做个象征性的总结. 下面是示例,保证代码可以编译,但不保证能运行,呵呵. import java.sql.*; /** * JDBC编程事务控制模型备忘 * * @author : leizhimin,2008-8-21 14:48:42.<p> */ public class JdbcTxText { public sta

服务器迁移之debian重新配置Web服务的一些细节备忘

这次服务系统采用的是最新的Debian 7.0,但是有几个细节的忽略导致我折腾了一番,我再这里再做个记录吧   之前配置Linux服务器时采用的是Debian系统一直很稳定,这次准备迁移到新的服务器环境上,好在以前的配置我在博客都做了备忘,所以很容易就搞定了,这次服务系统采用的是最新的Debian 7.0,但是有几个细节的忽略导致我折腾了一番,我再这里再做个记录吧: 首先要安装编译环境,虽然我们通过apt-get可以方便的绕过手动编译的环节,但是一些程序包可能内置编译命令,可以编译一些扩展程序,

win8.1系统怎么使用便签记录备忘信息

  1.打开win8.1系统的开始菜单,找到便签,如果没有可以在程序里面找到,并固定在开始页面,以方便使用; 2.点击便签,就会自动创建一个新便签到桌面,我们可以在里面输入自己备忘的事情或者一些重要知识等; 3.如果一个便签不够用,可以点击便签左上角的加号再新建便签使用; 4.如果便签使用完了,不需要了,想要删除,可以点击便签右上角的"×",提示点击确定后就删除了; 5.便签上面没有最小化的按钮,只有从任务栏里点击便签才能使它最小化; 6.便签还有多种颜色可供选择,对于颜色控,选择自己

mysql一些操作个人备忘(持续更新)

安装mysql数据库目录 1./usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/home/mysql/var ##指定安装后的数据目录 mysql 启动/关闭 1./usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/.my.cnf --user=mysql & #启动 2./usr/local/mysql/bin/mysqladmin --default

mysql 数据库导入\导出(总结备忘)

 数据库的基本导入\导出的命令 是 mysqldump 和 source  在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是用命令行 另一个是用phpmyadmin   先来说说phpmyadmin 这个工具导出和导入很简单 而且导入时无需建库 直接还原成原来的数据库   用source  也可以还原 但他导入文件时有大小限制不能超过2M 再来说说  mysqldump 和 source  用命令操作很快 但是想把导出的文件再导入时必须先建立一个数据库(这个

Selenium中使用chromedriver备忘

chromedriver是chrome浏览器的webdriver的一个实现.ChromeDriver是由Chrome开发团队来完成的因而ChromeDriver不包含在selenium包中,需要从ChromeDriver网页上下载下来. 下载地址: https://code.google.com/p/chromedriver/downloads/list 当然你需要安装chrome浏览器,浏览器中有支持WebDriver的API,你才可以使用ChromeDriver. 使用ChromeDrive

redhat9安装jdk5、ruby和Erlang备忘

   今天费了一个下午安装了redhat9,并且安装了需要使用的jdk5.netbean.ruby和Erlang.做个备忘. 一.安装jdk5 1.到sun的网站上下载jdk5与netbean5.5的捆绑版本,注意要linux平台的 2.比如下载到/root/目录下,执行 chmod 755 jdk-1_5_0_12-nb-5_5_1-linux-ml.bin 然后执行: ./jdk-1_5_0_12-nb-5_5_1-linux-ml.bin 就会自动启动安装向导,一路选择确定下去就OK了.