文件句柄

Windows程序设计3(资源、绘图、坐标系)

大兔子大兔子 提交于 2019-12-01 02:12:13
一、 RC 资源的使用 资源相关 资源脚本文件: *.rc 文件 编译器: RC.EXE 菜单资源的使用 1 添加菜单资源:通过菜单栏中插入( rc )菜单资源。或直接添加资源脚本到工程中。 2 加载菜单资源 2.1 在注册时设置菜单资源 2.2 加载菜单资源,设置到窗口 HMENU LoadMenu( HINSTANCE hInstance, // 应用程序句柄 LPCTSTR lpMenuName // 菜单字符串资源(或菜单资源 ID ) ); MAKEINTRESOURCE 宏,可以使得数字形式的资源 ID,转化为字符串形式的资源ID。 宏原型: LPTSTR MAKEINTRESOURCE( WORD wInteger // 转化的整数 ); 使用地方: 1. CreateWindow/Ex 创建窗口时。 如:wndclass.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1); 2. 在WM_CREATE时,通过SetMenu(): 函数原型 :BOOL SetMenu( HWND hWnd, // 窗口句柄 HMENU hMenu // 菜单句柄 , 可以通过 LoadMenu() 获得。 ); 如: HMENU hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_MENU1)); SetMenu

Windows程序设计4(文字、对话框、各控件)

与世无争的帅哥 提交于 2019-12-01 01:47:28
一、 文字 1. 绘制文字: TextOut – 绘制单行文字: 将文字绘制在指定坐标位置 BOOL TextOut( HDC hdc, // 设备上下文 int nXStart, // 文本行开始位置 int nYStart, // LPCTSTR lpString, // 文本串 int cbString // 文本字符串的长度 );//成功返回TRUE,失败返回FALSE BOOL ExtTextOut( HDC hdc, //DC句柄 int X, //输出X位置 int Y, //输出Y位置 UINT fuOptions, //输出选项 CONST RECT* lprc, //输出的矩形框 LPCTSTR lpString, //字符串 UINT cbCount, //字符数量 CONST int* lpDx //字符间距的数组 DrawText- 在矩形内绘制文字 int DrawText( HDC hDC, //DC句柄 LPCTSTR lpString, //字符串 int nCount, //字符串长度 LPRECT lpRect, //绘制文字的矩形框,区域 UINT uFormat //绘制的方式,文本格式 );// 成功返回文本高度,失败返回 0 uFormat: DT_LEFT –靠左 DT_CENTER _水平居中 DT_RIGHT –靠右 DT_TOP

Windows程序设计3(资源、绘图、坐标系)

﹥>﹥吖頭↗ 提交于 2019-12-01 01:44:42
一、RC资源的使用 •资源相关 资源脚本文件:*.rc文件 编译器:RC.EXE •菜单资源的使用 1 添加菜单资源:通过菜单栏中插入(rc)菜单资源。或直接添加资源脚本到工程中。 2 加载菜单资源 2.1 在注册时设置菜单资源 2.2 加载菜单资源,设置到窗口 HMENU LoadMenu( HINSTANCE hInstance, //应用程序句柄 LPCTSTR lpMenuName //菜单字符串资源(或菜单资源ID) ); MAKEINTRESOURCE宏,可以使得数字形式的资源ID,转化为字符串形式的资源ID。 宏原型: LPTSTR MAKEINTRESOURCE( WORD wInteger // 转化的整数 ); 使用地方: 1.CreateWindow/Ex 创建窗口时。 如:wndclass.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1); 2. 在WM_CREATE时,通过SetMenu(): 函数原型:BOOL SetMenu( HWND hWnd, // 窗口句柄 HMENU hMenu // 菜单句柄,可以通过LoadMenu()获得。 ); 如: HMENU hMenu=LoadMenu(g_hInstance,MAKEINTRESOURCE(IDR_MENU1)); SetMenu( hWnd , hMenu );

八.python文件操作

≯℡__Kan透↙ 提交于 2019-11-30 11:30:48
一,初识文件操作。 引子: 现在这个世界上,如果可以操作文件的所有软件都消失了,比如word,wps等等,此时你的朋友通过qq给你发过来一个文件,文件名是:美女模特空姐护士联系方式.txt,在座的所有男同学,那么你接受到这个文件之后,你的内心是否有一丝冲动,当然咱们不是那种闷骚的人,其实我们就是比较好奇,就是想要看看里面写的是什么,仅此而已,绝不联系。但是我说了所有可以操作文件的软件全部都没了,那么你是不是百爪挠心,火急火燎,哎呀。别急呀,你忘了么?你学过Python这门编程语言,这个语言肯定有能操控文件的功能。我相信在这种强大的动力下,你是可以,必须能学会的。 那么假设,现在让你用Python开发一个软件来操作这个文件,你觉得你需要什么必要参数呢? 文件路径 :D:\美女模特空姐护士联系方式.txt (你想操作这个文件,必须要知道这个文件的位置) 编码方式 :utf-8,gbk,gb2312.... (昨天刚讲完编码,文件其实就是数据的存储,数据存储你需要编码知道这个数据是以什么编码存储的) 操作模式 :只读,只写,追加,写读,读写.... 计算机系统分为:计算机硬件,操作系统,应用程序三部分。 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统

一个进程能够打开最大文件句柄数设到多大才合适(Linux)

给你一囗甜甜゛ 提交于 2019-11-29 22:40:34
在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。一般默认值为1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看: lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more 执行上述的脚本可能出现如下的结果: 131 24204 57 24244 57 24231 56 24264 其中,第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。 ps -aef|grep 24204 mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld 哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。 但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。

day08 文件操作

十年热恋 提交于 2019-11-29 22:11:30
day08 文件操作 今日内容概要 文件操作 ​ 读 ​ 读文本 ​ 读字节 ​ 读的方式 ​ 写 ​ 写文本 ​ 写字节 ​ 光标操作 ​ 文件修改 昨日内容回顾 基础数据类型补充 整型 bit_length 字符串 capitalize title swapcase index find join format center 列表 sort reverse sort(reverse=True) 列表乘法时,每个元素都一样 元组 (10), (10,), () dict:fromkeys方法批量创建键值对,值共用,若可变会有坑 循环删除的坑 列表删除时会自动补位 使用range和当前列表的长度进行删除 复制一个新列表,循环新的删除旧的 字典和集合,循环删除时不能改变字典的大小(长度) 复制一个新的字典或集合,循环新的,删除旧的 二次编码 encode 编码 decode 解码 用什么编码就要用什么解码 今日内容详细 文件操作初识 我们写的程序代码运行过程中的中间数据和最后的结果,都是存储在内存中。当我们终止程序之后,这些数据也都随之消失。 但是很多时候,我们需要将获得的数据存储起来,供以后使用。如果能把内存中的中间数据转移到硬盘中存储,当程序再次运行时就可以调用上次运行的结果。这就涉及到了Python中的文件操作。 文件操作模式 我们常用的文件操作模式总共有九种: r 只读文本

Win32汇编笔记——一些窗口的API函数

别来无恙 提交于 2019-11-29 17:13:21
1.模块的概念 一个模块代表的是一个 运行中 的exe文件或dll文件,用来代表这个文件中所有的代码和资源,用来代表这个文件中所有的代码和资源,磁盘上的文件不是模块,装入内存后运行时就叫做模块。一个应用程序调用其他DLL中的API时,这些DLL文件被装入内存,就产生了不同的模块,为了区分地址空间中的不同模块,每个模块都有惟一的模块句柄来标识。 2.句柄 句柄只是一个数值,它的值对程序来说是没有意义的,它只是Windows用来表示各种资源的编号而已。 由于很多API函数中都要用到程序的模块句柄,以便利用程序中的各种资源, 所以在程序的一开始就先取得模块句柄并存放到一个全局变量中可以省去很多的麻烦,在Win32中,模块句柄在数值上等于程序在内存中装入的起始地址。 注意:模块和句柄的概念。 3.API函数 取模块句柄函数:GetMoudleHandle 使用方法:invoke GetMoudleHandle,pMoudleName lpMoudleName参数是一个指向含有模块名称字符串的指针,可以用这个函数取得程序地址空间中各个模块的句柄,如 szUserDll db 'User32.dll',0 ... invoke GetMoudleHandle,addr szUserDll .if eax mov hUserDllHandle,eax .endif ...

Boost.Asio技术文档

烈酒焚心 提交于 2019-11-29 16:56:41
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0 的软件授权进行发布(见附带的LICENSE_1_0.txt文件或从 http://www.boost.org/LICENSE_1_0.txt ) Boost.Asio 是用于网络和低层IO 编程的跨平台C++库,为开发者提供了C++环境下稳定的异步模型. 综述 基本原理 应用程序与外界交互的方式有很多, 可通过文件,网络,串口或控制台.例如在网络通信中,完成独立的IO操作需要很长时间.对应用程序开发者提出了一个挑战. Boost.Asio 提供了管理需长时间运行操作的工具, 但不必涉及到线程的并发模式和显式锁定. Boost.Asio 库使用C++ 来实现,提供如网络编程等常用的操作系统接口. Boost.Asio实现了如下目标: · 可移植性Portability. 库支持一系列的常用系统操作, 具有稳定的跨平台特性. · 可扩展性Scalability. 库可以帮助开发者构建数千并发连接的网络应用程序.asio 库实现的每个系统操作都使用了最具扩展性的机制. · 效率Efficiency. 库支持发散聚合IO(scatter-gather I/O) 等技术,使应用程序尽量少的拷贝数据. · 可以像BSD Sockets

epoll详细工作原理

拥有回忆 提交于 2019-11-29 08:06:34
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢? 先简单回顾下如何使用C库封装的3个epoll系统调用吧。 [cpp] view plain copy int epoll_create( int size); int epoll_ctl( int epfd, int op, int fd, struct epoll_event *event); int epoll_wait( int epfd, struct epoll_event *events, int maxevents, int timeout); 使用起来很清晰,首先要调用epoll_create建立一个epoll对象。参数size是内核保证能够正确处理的最大句柄数,多于这个最大数时内核可不保证效果。 epoll_ctl可以操作上面建立的epoll,例如,将刚建立的socket加入到epoll中让其监控,或者把 epoll正在监控的某个socket句柄移出epoll,不再监控它等等。 epoll_wait在调用时,在给定的timeout时间内

07内核对象

匆匆过客 提交于 2019-11-29 00:27:02
windwos的对象管理器 windwos操作系统虽然是以C来编写的,但也使用了面向对象的思想. windwos的内核主要有: 执行体, 微内核,HAL三层. 对象管理器是执行体重的组件. 主要管理执行体对象. windwos对象管理器的目的是: 为执行体的数据结构提供一种统一而又可扩展的定义和控制机制. 提供统一的安全访问机制. 在无须修改已有系统代码的情况下, 加入新的对象类型. 提供一组标准的API来对对象执行各种操作. 提供一种命名机制, 与文件系统的命名机制集成在一起. 每个内核对象由两个部分组成: 对象头 对象体. 对象头使用以下结构体来表示: typedef struct _OBJECT_HEADER { LONG_PTR PointerCount; /* 对象的引用计数 */ union { LONG_PTR HandleCount; /* 指向该对象的句柄数 */ PVOID NextToFree; /* 对象被延迟删除时加入到的链表 */ }; POBJECT_TYPE Type; /* 对象的类型的结构体指针 */ UCHAR NameInfoOffset; /* 名称信息的内存偏移 */ UCHAR HandleInfoOffset; /* 句柄信息的内存偏移 */ UCHAR QuotaInfoOffset; /* 配额信息的内存偏移 */ UCHAR