摘要: 一、文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 1、每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2、内核为所有打开文件维持一张文件表 3、每个打开文件都有一个v节点结构,v节点包含了文件类型和对此文件进行各种操作的函数的指针。PS:Linux中没有使用v节点,而是使用了通用i节点结构。 文件描述符标志只用于一个进程的一个描述符 文件状态标志适用于指向该给定文件表项的任何进程中的所有描述符二、原子操作 1、pread函数和pwrite函数 #include ssize... 阅读全文
posted @ 2013-12-16 19:15 LOSER Z 阅读(782) 评论(0) 推荐(0) 编辑
摘要: 1、什么是Windows作业 Windows作业实际上一个进程组,可以给作业设置权限,一旦进程加入到作业内,进程的权限将会被作业限制。2、创建一个作业 HANDLE CreateJobObject(LPSECURITY_ATTRIBUTES lpJobAttributes, // 安全属性 LPCTSTR lpName //名称 ); //返回创建的Job句柄3、设置作业权限 BOOL SetInfo... 阅读全文
posted @ 2013-12-15 17:59 LOSER Z 阅读(953) 评论(0) 推荐(1) 编辑
摘要: 一、Windows进程 1、进程 进程是一种容器,包含了应用程序实例的各种资源。 2、Windows进程的一些特点 2.1、进程中包含了执行代码等资源 2.2、进程都具有私有的地址空间 2.3、每个进程都有一个ID,标识进程 2.4、每个进程都有自己的安全属性 2.5、至少要包含一个可以执行的线程二、进程的环境 1、环境信息的获取 LPVOID GetEnvironmentStrings(VOID); //返回值是获取到的所有环境信息 2、释放获取到的所有环境信息 BOOL FreeEnvironmentStrings(LPSTR lpszEnv... 阅读全文
posted @ 2013-12-15 16:27 LOSER Z 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 1 系统和当前目录 1.1 获取Windows目录 UINT GetWindowsDirectory(LPTSTR lpBuffer, //BUFF的地址 UINT uSize //BUFF的长度 ); 例如: C:\Windows 1.2 获取System目录 UINT GetSystemDirectory(LPTSTR lpBuffer, //BUFF的地址 UINT uSize ... 阅读全文
posted @ 2013-12-15 14:55 LOSER Z 阅读(1036) 评论(0) 推荐(0) 编辑
摘要: 1 文件的创建或打开 HANDLE CreateFile(LPCTSTR lpFileName, //文件路径和名称 DWORD dwDesiredAccess, //访问方式,最常用的值是GENERIC_READ,GENERIC_WRITE或两 个:GENERIC_READ|GENERIC_WRITE. DWORD dwShareMode, //共享模式,FILE_SHARE_DELETE,FILE_SHARE_READ,FIL... 阅读全文
posted @ 2013-12-15 14:31 LOSER Z 阅读(944) 评论(0) 推荐(0) 编辑
摘要: 要实现从尾到头打印链表,方法很多,但常用的有两种方法,一是递归,二是利用栈。 首先定义一个链表: struct ListNode{ int m_nKey; //值 ListNode* m_pNext; //指向下一个值的指针} 第一种利用递归的方法: void PrintListReversingly_Recursively(ListNode* pHead){ if(pHead!=NULL) { //先判断链表是否为空 if(p_Head->m_pNext !=NULL) { //然后判断链表中只有一个元素 PrintList... 阅读全文
posted @ 2013-12-14 20:24 LOSER Z 阅读(324) 评论(0) 推荐(0) 编辑
摘要: UNIX系统中的大多数文件I/O只需要用到5个函数:open,read,write,lseek以及close文件描述符 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用 文件描述符的变化范围是0-OPEN_MAX,OPEN_MAX是每个进程最多打开的文件1、open函数 #include int open(const char* pathname, int flag, mode_t mode );//若成功则返回文件描述符,若出错则返回-1 flag打开方式有3种:O_RDONLY只读打开 O_WRONLY 只写打开 ... 阅读全文
posted @ 2013-12-13 17:35 LOSER Z 阅读(719) 评论(0) 推荐(0) 编辑
摘要: 1、两者区别 无模式对话框 - 对话框显示后,不影响其它窗口的使用 有模式对话框 - 对话框显示后,会将其它窗口禁止输入操作.2、两者的创建差异 无模式对话框 -使用CreateDialog函数 有模式对话框 -使用DialogBox函数3、创建过程 无模式对话框:HWND CreateDialog(HINSTANCE hInstance,//应用程序实例句柄 LPCTSTR lpTemplate,//对话框的资源ID HWND hWndParent,//父窗口 DLGPROC ... 阅读全文
posted @ 2013-12-13 12:45 LOSER Z 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 一、WM_PAINT消息 1 WM_PAINT的产生 由于窗口的互相覆盖等,产生需要绘制的区域,那么会产生WM_PAINT消息。 一般情况下,不直接发送WM_PAINT消息,通过API声明需要绘制区域,来产生WM_PAINT消息. 例如,可以使用InvalidateRect声明一个需要重新绘制的区域. 2 WM_PAINT的注意点 2.1 如果一个消息队列中,有多个WM_PAINT消息,只有最后一个WM_PAINT消息会被处理. 重绘是非常费内存资源的,比较慢。 2.2 WM_PAINT消息处理中,要清空需要被绘制的区域. BeginPaint 3 WM_PAINT的使用... 阅读全文
posted @ 2013-12-12 19:55 LOSER Z 阅读(701) 评论(0) 推荐(0) 编辑
摘要: 1、消息机制 过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序继续执行,直到程序结束。 事件驱动:程序的执行顺序是无序的。某个时间点所执行的代码,是由外界通知。由于我们无法决定用户执行顺序,所以代码的执行也是无序。 Win32的消息机制 - 事件驱动2、Win32消息程序 2.1、Win32消息循环 2.1.1、GetMessasge BOOL GetMessage(LPMSG lpMsg,//存放获取到的消息数据 HWND hWnd,//获取消息的窗口句柄 UINT wMsg... 阅读全文
posted @ 2013-12-12 17:49 LOSER Z 阅读(924) 评论(0) 推荐(0) 编辑
摘要: 一,Makefile的文件名 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,大部分情况下,make命令都支持makefile和Makefile这两种命名。所以一般情况下都是将文件名命为这两个,没有后缀。二,Makefile内容格式语法 目标名:依赖目标 @命令 @命令三,make命令行的使用 1,通用情况:make -f make脚本文件 目标名,这种情况适用于没有使用makefile或Makefile文件名,而是使用其它格式的命名方式,如: 我们有一个demo... 阅读全文
posted @ 2013-12-11 16:27 LOSER Z 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 在ubuntu中,敲入命令行:sudo apt-get install vim,然后输入系统密码,确认Y,即可下载vim按下vim,在后面跟上文件的路径,即可进入文件到编辑模式,如果不存在该文件,将创建一个文件VIM的运行模式分为3种:编辑模式:等待编辑命令输入插入模式:编辑模式下,输入 i 或者o或者a进入插入模式,插入文本信息,退出插入模式按Esc,随即进入编辑模式命令模式:在编辑模式下,输入 “:” 进行命令模式VIM 使用的命令:q 直接退出vi:wq 保存后退出vi ,并可以新建文件:q! 强制退出,一般用于编辑过后,不想保存,直接退出:w file 将当前内容保存成某个文件:set 阅读全文
posted @ 2013-12-10 16:59 LOSER Z 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 一、静态库的编译 静态库的编译过程如下: 1、编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2、归档成静态库 A、归档的工具是ar工具,使用ar -r可以将文件归档成静态库,调用格式:ar -r 静态库文件 被归档的文件 例如:我们这有两个C文件,分别为test1.c和test2.c 首先我们将它编译成目标文件:gcc -c -static test1.c gcc -c -static test2.c 此时会产生两个文件,分别为test1.... 阅读全文
posted @ 2013-12-09 19:27 LOSER Z 阅读(979) 评论(0) 推荐(1) 编辑
摘要: 使用到两个函数mmap:用于分配内存;munmap:用于释放内存。 mmap的原型如下: void *mmap( void *start, //指定映射的虚拟地址 0由系统指定开始位置 size_t length, //映射空间大小 pagesize倍数 int prot, //映射权限 PROT_NONE | PROT_READ PROT_WRITE PROT_EXEC int flags, //映射方式 int fd, //文件描述符号 offset_t off //文件中的映射开始位置(必须是p... 阅读全文
posted @ 2013-12-08 16:40 LOSER Z 阅读(782) 评论(0) 推荐(0) 编辑
摘要: 一、为什么要有虚拟内存 虚拟内存的提出,是为了禁止用户直接访问物理存储设备,有助于系统稳定。二、为什么一个程序不能访问另外一个程序的地址指向的空间 1:每个程序的开始地址0x80084000 2:程序中使用的地址不是物理地址,而是逻辑地址(虚拟内存). 逻辑地址仅仅是编号.编号使用int 4字节整数表示. 2^32=4294967296=4G 每个程序提供了4G的访问能力三、内存映射 逻辑地址与物理地址关联的过程是内存映射。 虚拟地址与物理地址映射的时候有一个基本单位:至少会映射4K。 段错误:无效访问. 那段内存没有映射,访问的内存超出了系统所给这个程序的内存空间。 合法访问:... 阅读全文
posted @ 2013-12-07 17:44 LOSER Z 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 一、函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall、 __fastcall、__cdecl1、__stdcall表示每个调用者负责清空自己调用的函数的临时栈 __fastcall函数自己在返回前自己清空临时栈,然后返回值退出 __cdecl表示所有调用者只有一个清空函数来负责清空所有被调用函数的临时栈2、这三种方式决定函数栈压栈的参数顺序,都是从右到左.3、在window下,函数名前加_stdcall,它决定了函数的名字转换方式.二、关于临时栈的总结1.函数执行的时候有自己的临时栈(在局部栈里). C++成员函数拥有两个栈空间,一个是函数本身的栈空间, 阅读全文
posted @ 2013-12-07 17:29 LOSER Z 阅读(828) 评论(0) 推荐(0) 编辑
摘要: 1、malloc的工作原理: malloc使用一个数据结构(链表)来维护分配空间链表的构成:分配的空间/上一个空间的数据/下一个空间/空间大小等信息。对malloc分配的空间不要越界访问,因为容易破坏后台的维护结构,导致malloc/free2、new和malloc的区别和联系: 联系:new的实现使用的是malloc来实现的 区别:new使用malloc后,还要初始化空间。 基本类型,直接初始化成默认值(int成0 bool类型是false); UDT(用户自定义的)类型,直接调用指定的构造器 阅读全文
posted @ 2013-12-06 20:06 LOSER Z 阅读(342) 评论(0) 推荐(0) 编辑
摘要: stat 显示指定文件的相关信息,比ls命令显示内容更多who 显示在线登录用户 hostname 显示主机名称 uname显示系统信息 top 显示当前系统中耗费资源最多的进程 ps 显示瞬间的进程状态du 显示指定的文件(目录)已使用的磁盘空间的总量 df 显示文件系统磁盘空间的使用情况free 显示当前内存和交换空间的使用情况 ifconfig 显示网络接口信息 ping 测试网络的连通性 netstat 显示网络状态信息 man 命令帮助信息查询alias 设置命令别名alias [别名]=[指令名]clear 清屏kill 杀死一个进程gzip命令命令格式:gzip [选项] 压缩( 阅读全文
posted @ 2013-12-06 12:51 LOSER Z 阅读(354) 评论(0) 推荐(0) 编辑
摘要: ls 显示文件和目录列表-l 列出文件的详细信息-a 列出当前目录所有文件,包含隐藏文件mkdir 创建目录-p 父目录不存在情况下先生成父目录cd 切换目录touch 生成一个空文件echo 生成一个带内容文件cat tac显示文本文件内容cp 复制文件或目录rm 删除文件-r同时删除该目录下的所有文件-f强制删除文件或目录mv 移动文件或目录,文件或mv aaa bbb将aaa改名为bbbfind 在文件系统中查找指定的文件-name 文件名wc 统计文本文档的行数,字数,字符数grep 在指定的文本文件中查找指定的字符串rmdir 删除空目录tree 显示目录目录改名树pwd 显示当前工 阅读全文
posted @ 2013-12-06 12:27 LOSER Z 阅读(456) 评论(0) 推荐(0) 编辑
摘要: / 是根目录~是主目录bin 存放二进制可执行文件(Is,cat,mkdir等)boot 存放用于系统引导时使用的各种文件dev 用于存放设备文件etc 存放系统配置文件home 存放所有用户文件等根目录lib 存放根文件系统中的程序运行所需要的共享库及内核模块mnt 系统管理员安装临时文件系统的安装点opt 额外安装等可选应用程序包所放置的位置proc 虚拟文件系统,存放当前内存的映射root 超级用户目录sbin 存放二进制可执行文件,只有root才能访问tmp 用于存放各种临时文件usr 用于存放系统应用程序,比较重要的目录,/usr/local本地管理员软件安装目录var 用于存放运行 阅读全文
posted @ 2013-12-06 12:25 LOSER Z 阅读(538) 评论(0) 推荐(0) 编辑