
问题一:文件句柄是什么 在文件I/O中,要从一个文件读取数据,应用程序首先要调用 *** 作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给 *** 作系统。当完成任务后,再通过调用系统函数来关闭该文件。
问题二:什么是句柄 句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。
在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄 *** 纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。
创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。
问题三:“句柄”到底是什么意思 句柄可以理解为 *** 作标示
比如一个程序有好多窗口,每个窗口有好多的属性
如何 *** 作某个窗口就让系统很头疼
于是对不同窗口用不同的标示,窗口句柄
DECLARE_HANDLE 就是HWND
然后好多函数通过这个标示来判断对哪个窗口 *** 作
如 ::SetWindowText( hWnd , strTitle
其他的还有好多类型的句柄
想文件句柄,线程句柄等等
句柄不深奥,是翻译者给神话了。就是控制、 *** 作标识!
问题四:句柄是一个什么类型的值? 5分 VC编程――句柄篇
句柄概念在WINDOWS编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:&l丁;>(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的,这些项目包括:
模块(module)
任务(task)
实例(instance)
文件(file)
内存块(block of memory)
菜单(menu)
控制(control)
字体(font)
资源(resource),包括图标(icon),光标(cursor),字符串(string)等
GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。
WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行 *** 作。
在>(南京大学出版社)一书中是这么说的:句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。
从上面的2个定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等,这当中还有一个通用的句柄,就是HANDLE,比如下面的语句:
HINSTANCE hInstance;
可以改成:
HANDLE hInstance;
上面的2句语句都是对的。
一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行 *** 作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。
句柄只有当唯一的确定了一个项目的时候,它才开始有意义。句柄对应着项目表中的一项,而只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同的句柄,举个例子来说吧!比如:我们可以为我们的应用程序申请一块内存块,通过调用API函数GlobalAlloc,来返回一个句柄值:
hMem=GlobalAlloc();
其实现在hMem的值只是一个索>>
问题五:书上常说的“文件句柄”是什么? 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
句柄是一个标识川,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。
文件句柄按照这个概念来理解,就很好理解了。
问题六:什么是句柄 5分 句柄,是系统程序对数据定义的标识,通常是一个整数。
系统程序和用户程序需要进行数据交换,为了避免传递大量数据,尤其是不希望用户直接 *** 作数据,系统使用一个数字来表示这组数据(例如与一个窗口相关的一组数据)。用户程序如果需要对数据进行修改,都只能通过系统程序提供的函数以及数据的句柄和相关参数来完成。
系统程序很可能使用数据的地址作为句柄,但这仅仅是可能,完全取决于定义句柄的程序。
希望解释清楚了。
问题七:linux 查看什么文件打开了句柄 linux系统下查看进程打开文件 在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件,有多少
问题八:什么时候需要 close 文件句柄 。
问题九:windows 句柄到底是什么 句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。
windows 之所以要设立句柄,根本上源于内存管理机制的问题―虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。
数据对象加载进入内存中之后即获得了地址,但是这个地址并不是固定的,(至于为什么以及什么情况下变动具体需要大家研究虚拟地址的原理与机制我这里只提我确定知道的例子)数据对象会根据需要在内存与硬盘之间游弋移动(例如不常用的数据会为常用数据让出其占用的内存空间进而被淘汰进硬盘中的虚拟内存之中以优化配置整体系统的资源进而提升效率性能),因此其物理地址总是变动的,那么作为管理者 则必须对 管理对象所发生的变化了如指掌才行,因此系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址也就是当前的地址,其实设计机制很简单 :系统的某个部门移动了对象的地址后,同时上报给句柄所属部门管理者,管理者将改动写入句柄即可。该数据被重新起用时去其所属句柄内按内容存取即可。
句柄,英文:HANDLE,在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:《Microsoft Windows 3 Developer's Workshop》(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的。
在程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、 *** 作系统)所管理的内存块或对象时,就要使用句柄。
句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
在上世纪80年代的 *** 作系统(如Mac OS 和Windows)的内存管理中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,Windows API大量使用句柄来标识系统中的对象,并建立 *** 作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多 *** 作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。
问题十:句柄是什么意思,详细解释下 句柄是编写工具 游戏外挂所用到得窗口ID 游戏窗口进程,比如按键精灵所用到的就是获取游戏窗口(句柄)进程ID E语言编写软件很多地方都会用到句柄 自己慢慢学
安装lsof
yum install lsof
查看线程占句柄数
ulimit -a
查看系统打开句柄最大数量
more /proc/sys/fs/file-max
1
查看打开句柄总数
lsof|awk '{print $2}'|wc -l
1
根据打开文件句柄的数量降序排列,其中第二列为进程ID:
lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
1
根据获取的进程ID查看进程的详情
ps -ef |grep
1
修改linux单进程最大文件连接数
修改linux系统参数。vi /etc/security/limitsconf 添加
softnofile65536
hardnofile65536
修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:
1 求一份linux环境下的qt creator教程,最好是包含有关C编程的~~~谢了!
Qt creator是跨平台的,你可以在Windows下编程,编译的时候再拿到linux下重新编译一下就OK了,Qt和C++语言类版似,而且权Qt有自己的帮助文档,多看看多试试,网上QT的视频,看完了跟着做一下,或者你字节上网搜事件队列处理,事件响应,信号和槽,这3样都会了,做啥你都有思路了~
希望对你有所帮助!
2 您好!向您请教一个问题linux下QT界面,程序1如何获取程序2的窗口句柄
linux Qt 下不流行句柄 Qt 下要访问一个窗口用的是指针
程序1 想获取, 程序 2 的窗口句柄属于进程间专通属信
进程间通信有多种方法如果找同一台机器上我推荐用有名管道 但是由于每个进程都有自己的地址空间进程间不能直接访问对方的地址所有说不管你有没有成功获得这个句柄,这个句柄都是不能用的
3 Qt用windows下的工具开发的界面能否放在linux下面使用如果能,这和linux下有什么区别
只调用QT库或是标准库的话,只要重新编译就行,linux下有专用的Qt Creator,用法和WINDOWS类似
4 linux下QT编程,就是写一个可视界面程序,输入局域网内某人IP,就可以和他聊天
这个程序很简单啊 要用到QUdpSocket等类
5 如何用qt在linux中编写并使用动态链接库
先写好实现动态链接库的libmycpp文件和libmyh文件,如下:
// libmycpp
#include"libmyh"
#include<iostream>
using namespace std;
MyLib::MyLib()
{
}
MyLib::~MyLib()
{
}
void MyLib::hello()
{
cout << "hello world~!" << endl;
}
// libmyh文件
#ifndef LIBMY_H
#define LIBMY_H
class MyLib
{
public:
MyLib();
~MyLib();
void hello();
};
#endif /LIBMY_H/
然后写好pro文件,如下:
TEMPLATE = lib
TARGET =DllTest
HEADERS += libmyh
SOURCES += libmycpp
保存关闭,文件名命名为MyDllpro
在Shell里执行qmake MyDllpro,在没有错误的情况下,然后执行make ,可以看到生成了几个后缀名为so的文件,如下图:
6 在linux下用qt编程时,请教怎样在程序中调用另一个程序,例如我写好了个聊天程序,想添加个按钮,
使用QProcess,看下Qt的帮助文档有关QProcess这块的你就懂了。
7 linux qt多长时间能学会
1、C++的基础,qt只是库而已,C++才是基础这个就不说了吧,《C++ Primer》可以了;专
2、linux的基础,可以看《属Linux就该这么学》这本书
3、平时多逛逛官网啊、论坛(qt中文论坛,版主挺牛的)之类的。
其实只要有兴趣,学起来还是蛮快的,不过基础还是要打牢固啊,呵呵。
8 求个linux 下qt实现qq聊天功能的代码
//down51cto/data/615244
9 第一次接触Linux和Qt 最近拿到一个局域网下的即时聊天软件,在Linux下用Qt做的,但是不是很懂。
给权限啊,只要是给了权限就可以执行,当然,必须是执行有效的。好像是+x是执行权限,用ls -l可以查看文件有哪些权限
10 linux下的Qt如何设置主窗口的背景,用手写代码的那种
Qt4版本以上可在构造函数中加入如下代码
RcMainWindow::RcMainWindow(QWidget parent) :
QMainWindow(parent),
ui(new Ui::RcMainWindow)
{
ui->setupUi(this);
QPixmap pixmap(":/img/backgroundbmp");
QPalette palette;
palettesetBrush(backgroundRole(), QBrush(pixmap));
setPalette(palette);
}
此外也可实现继承自父类QMainWindow的虚函数paintEvent,并在该函数中加入同样代码。
您好!很高兴能为您解答。
修改文件句柄数在Linux下,我们使用ulimit -n
命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有
点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files
open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
1lsof -n |awk '{print $2}'|sort|uniq -c |sort
-nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
1# lsof -n|awk '{print $2}'|sort|uniq -c |sort
-nr|more
2 131 24204
3 57 24244
4 57 24231
5 56 24264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
1ps -aef|grep 24204
2mysql 24204 24162
99 16:15 00:24:25 /usr/sbin/mysqld
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
1ulimit -HSn 4096
以 上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响
应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,,可以修改 /etc/profile
把上面命令加到最后。(findsun提出的办法比较合理)
/////////////////////////////////////////////////////////////////////////////
在 Linux下面部署应用的时候,有时候会遇上Socket/File: Can't open so many
files的问题,其实Linux是有文件句柄限制的(就像WinXP?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到
这个数量,因此我们需要把这个值改大一些。
大概知道ulimit这个命令是相关的,上Google搜索了一下,大多数说的很含糊,也没有统一说一下,经过两个小时看了不少文章终于弄清楚ulimit相关的一些配置问题。
我们可以用ulimit -a来查看所有限制值,我只关心文件句柄数量的问题
open files (-n) 1024
这个就是限制数量
这里,有很多ulimit的文章都说的很含糊,究竟这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了的程序的限制
3、对这个值的修改,退出了当前的shell就会消失
比如说,我先运行了一个程序A,然后通过ulimit修改了限制为2048,然后运行B,然后退出了shell再登录,然后运行C。那就只有B可以打开2048个句柄。
如果我们需要改变整体的限制值,或者我们运行的程序是系统启动的,应该怎么处理呢
其中一个方法,是想ulimit修改命令放入/etc/profile里面,但是这个做法并不好
正确的做法,应该是修改/etc/security/limitsconf
里面有很详细的注释,比如
soft nofile 2048
hard nofile 32768
就可以将文件句柄限制统一改成软2048,硬32768
这里涉及另外一个问题,什么是软限制,什么是硬限制
硬限制是实际的限制,而软限制,是warnning限制,只会做出warning
其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
修改了,重新登录用ulimit一开就立刻生效了,不过之前启动过的程序要重新启动才能使用新的值。我用的是CentOS,似乎有些系统需要重启才能生效。
ulimit其实就是对单一程序的限制
那系统总限制呢
其实是在这里,/proc/sys/fs/file-max
可以通过cat查看目前的值,echo来立刻修改
另外还有一个,/proc/sys/fs/file-nr
只读,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof
可以很方便看到某个进程开了那些句柄
也可以看到某个文件/目录被什么进程占用了。
---查看系统默认的最大文件句柄数,系统默认是1024
# ulimit -n
1024
----查看当前进程打开了多少句柄数
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
131 24204
57 24244
57 24231
其中第一列是打开的句柄数,第二列是进程ID。
可以根据ID号来查看进程名。
# ps aef|grep 24204
nginx24204 24162 99 16:15 00:24:25 /usr/local/nginx/sbin/nginx -s
Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
# ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改bash_profile文件,可以修改 /etc/profile 把上面命令加到最后
以上就是关于文件句柄是什么全部的内容,包括:文件句柄是什么、Linux文件句柄占用数量查看与设置、linux课程设计聊天qt等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)