![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
君记否
么么哒^ ^
展开
-
四种进程或线程同步互斥的控制方法
<br />1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 <br /> 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 <br /> 3、信号量:为控制一个具有有限数量用户资源而设计。 <br /> 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。<br />临界区(Critical Section)<br /><br /> 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。转载 2010-11-24 09:48:00 · 564 阅读 · 0 评论 -
Linux下段错误的原因以及调试方法
<br />简而言之,产生段错误就是访问了错误的内存段。<br />一、一般来说,段错误就是指访问的内存超出了系统分配给这个程序的内存空间,通常这个值是由gdtr来保存的,<br />1)gdtr是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别。<br />2)指向的gdt是由以64位为一 个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别转载 2010-11-21 22:34:00 · 2458 阅读 · 1 评论 -
操作系统概念
<br />1、系统调用大致可以分为五类:进程管理,文件管理,设备管理,信息维护,通信。<br />(1)信息维护:获取时间、日期,获取系统信息等。<br />(2)两种常见的通信模型:消息传递(必须先打开连接)和共享内存。<br />2、Java通过Java虚拟机(JVM)来实现平台无关的可移植性。<br />3、将CPU切换到另一个进程需要保存原来进程的状态并装入新进程的保存状态。这一任务称为上下文切换。<br />(1)、fork()之后,操作系统会创建一个和父进程完全相同的子进程,他们共享代码区,但原创 2010-11-21 22:26:00 · 675 阅读 · 0 评论 -
Windows SDK之文件API
<br />1. 文件API<br />1.1. 打开关闭文件<br />CreateFile<br />HANDLE CreateFile(<br /> LPCTSTR lpFileName, //指向文件名的指针<br /> DWORD dwDesiredAccess, //访问模式(写/读)<br /> DWORD dwShareMode, //共享模式<br /> LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针<br /> D转载 2010-12-29 09:26:00 · 2513 阅读 · 0 评论 -
VARIANT 结构
_variant_t 是什么数据类型??这个问题的答案比较广泛: 我所知道常用的 1。在执行的SQL语句一般都是_bstr_t 2.Connection 中的RecordsAffected 为VARIANT 3.使用get_Value()获得的记录的值为 VAARIANT 等等。。。 _bstr_t 中记录了字符串的长度, _variant_t 记录有数据的类型和数据的值 如转载 2010-10-23 10:18:00 · 784 阅读 · 0 评论 -
如何卸载软件
<br />1、通过deb包安装的情况:<br />安装.deb包:代码:sudo dpkg -i package_file.deb<br /><br />反安装.deb包:代码:sudo dpkg -r package_name<br /><br /><br />2、通过apt-get安装的情况:<br />安装代码:sudo apt-get install package_name<br /><br />反安装代码:sudo apt-get remove package_name转载 2010-12-10 19:24:00 · 532 阅读 · 0 评论 -
Ubuntu 下安装 Code::Blocks
<br />在Linux环境下,就不同了。VisualStudio不用想了,地球人都知道是不可能的事。好用的只有Anjuta,KDevelop和Code::Blocks。本人偏爱Gnome,所以KDevelop排除。Anjuta很久很久以前用过,很好用,但是搭配的是GTK。要跨平台开发,非Code::Blocks+wxWidgets莫属。<br />安装步骤:<br />1.先把编译环境,C库、C++库和Boost库装好,如下:<br />sudo apt-get install libc6转载 2010-12-09 21:47:00 · 912 阅读 · 0 评论 -
binary和text方式打开文件的区别(转)
<br />这个我原来也遇见过,并处理过以binary和text方式打开文件的区别,当时是05年实现发送http数据包,一直有问题,后来截取数据对比发现的,但是当时没有记录,今天发现这篇文章对这里进行了总结,故收集下来<br /><br />发信人: LosComet (水母第3不厚道男), 信区: CProgramming<br />标 题: binary和text方式打开文件的区别<br />发信站: 水木社区 (Mon Apr 3 17:55:20 2006), 站内<br /><转载 2010-12-09 11:50:00 · 3965 阅读 · 0 评论 -
C++获取当前进程的进程号方法
<br />其实我们系统中有现成的函数可以获取到进程号,如下:<br />#ifdef _WIN32<br />#include <process.h><br />#else<br />#include <unistd.h><br />#endif<br />int main()<br />{<br /> int iPid = (int)getpid();<br /> std::cout<<"The process id is: "<<iPid<<std::endl;<br /> r转载 2010-11-24 14:38:00 · 23676 阅读 · 1 评论 -
ubuntu vim使用技巧
<br />[编辑] 安装 vim <br />控制台版本的vim随ubuntu一起发行,因此没必要安装. 然而,如果您更喜欢GUI界面下的vim的话,请从新立得安装vim-gtk软件包或在终端中输入:<br />sudo apt-get install vim-gtk<br />[编辑] 快速指南<br />Vim 需要学习很多东西。然而,如果您熟悉了vim的话,您可以利用vim的高级特征非常熟练的操作文本。<br />您可以在终端中输入vim来启动控制台模式下的vim,或输入gvim 来启动原创 2010-11-26 14:20:00 · 839 阅读 · 1 评论 -
error C2065: 'CoInitializeEx' : undeclared identifier; 解决方法
<br />在stdafx.h中定义(放在#define VC_EXTRALEAN 的下一行)<br />#define _WIN32_WINNT 0x0500<br /><br />实际上你可以看objbase.h的文件中CoInitializeEx的定义:<br /><br />#if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM<br />WINOLEAPI CoInitializeEx(LPVOID pvReser转载 2010-11-24 15:52:00 · 3767 阅读 · 0 评论 -
Windows Alternate Data Streams
http://www.bleepingcomputer.com/tutorials/windows-alternate-data-streams/IntroductionAnyone who is in the security arena should know about Windows Alternate Data Streams, otherwise known as ADS.转载 2012-07-10 10:59:38 · 1203 阅读 · 0 评论 -
虚拟机centos中开启ftp服务与windows共享文件操作命令
cd /etc/vsftpd/cp vsftpd.conf vsftpd.conf.bakvim vsftpd.conf 修改权限开启ACSII上传下载传输模式ascii_download_enable=YES //开启了下载时的ASCII模式数据传输ascii_upload_enable=YES //开启了上传时的ASCII模式数据传输vim user_转载 2012-03-05 09:20:27 · 3173 阅读 · 1 评论 -
虚拟机centosmysql通信问题及eclipse环境配置问题
在vmware安装centos之后,配置mysql通信时,要关掉windows防火墙和centos自带的防火墙,进入mysql命令行,执行命令: grant all on *.* to 'root'@'ip' identified by'password';这样就可以允许其他机器访问MySQL了。在eclipse中运行c++,遇到unresolved inclusion错误,解决办转载 2012-03-02 13:11:54 · 646 阅读 · 0 评论 -
讲Linux下面线程的操作、多线程的同步和互斥相关函数及操作的文章链接
Linux多线程编程(不限Linux)http://www.cnblogs.com/skynet/archive/2010/10/30/1865267.htmlLinux多线程编程详细解析----条件变量 pthread_cond_thttp://blog.csdn.net/sunboy_2050/article/details/6031723pthre转载 2012-03-05 11:25:08 · 868 阅读 · 0 评论 -
开发一个检测钩子程序的工具
一、引言 Windows系统是建立在事件驱动的机制上的,每一个事件就是一个消息,每个运行中的程序,也就是所谓的进程,都维护者一个或多个消息队列,消息队列的个数取决于进程内包含的线程的个数。由于一个进程至少要拥有一个线程,所以进程至少要有一个消息队列。虽然Windows系统的消转载 2011-10-13 17:36:37 · 1042 阅读 · 0 评论 -
字符编码笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian(转)
字符编码笔记:ASCII,Unicode和UTF-8<br /> <br />作者: 阮一峰 <br />版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 <br />最后修改时间:2007年10月29日 09:46 <br />今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 <br />结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。 <br />下面就是我的笔记,主要用来整理自转载 2011-03-14 15:47:00 · 781 阅读 · 0 评论 -
postmessage 、sendmessage区别
<br /><br />本文讲解SendMessage、PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级、中级、高级程序员进行理解,三个步骤分别为:<br />1、SendMessage、PostMessage的运行机制。<br />2、SendMessage、PostMessage的运行内幕。<br />3、SendMessage、PostMessage的内部实现。<br />注:理解这篇文章之前,必须先了解Windows的消息循环机制。<br /> <br />1、SendM转载 2011-03-14 11:43:00 · 519 阅读 · 0 评论 -
关于WaitForMultipleObjects返回值得问题
<br />如果因时间终了而返回,那返回值是WAIT_TIMEOUT <br /> 如果bWaitAll是TRUE,那么返回值是WAIT_OBJECT_0 <br /> 如果bWaitAll是FALSE,那么返回值减去WAIT_OBJECT_0,就表示哪一个handle被激发了 <br /> 如果函数失败,则返回WAIT_FAILD,这时候你可以用GetLastError()找出失败原因<br /> <br />bWaitAll 为第三个参数转载 2010-11-24 17:10:00 · 2360 阅读 · 0 评论 -
windows笔记-跨越进程边界共享内核对象【对象句柄的继承性】
<br />都是一些概念性的东西,看得可能会有点烦,不过看了后面多线程和内存管理再回过头来看,会有不一样的感觉。<br /> <br />许多情况下,在不同进程中运行的线程需要共享内核对象。下面是为何需要共享的原因: <br />• 文件映射对象使你能够在同一台机器上运行的两个进程之间共享数据块。 <br />• 邮箱和指定的管道使得应用程序能够在连网的不同机器上运行的进程之间发送数据块。 <br />• 互斥对象、信标和事件使得不同进程中的线程能够同步它们的连续运行,这与一个应用程序在完成某项任务时需要将转载 2010-12-07 20:22:00 · 457 阅读 · 0 评论 -
windows笔记-Windows应用程序
<br />Windows支持两种类型的应用程序。<br />一是基于图形用户界面(GUI)的应用程序。(见:一个简单的windows GUI应用程序)<br />二是基于控制台用户界面(CUI)的应用程序。<br />用于CUI 应用程序的链接程序开关是/SUBSYSTEM:CONDOLE ,<br />用于G U I 应用程序的链接程序开关是/SUBSYSTEM : WINDOWS 。<br /> <br />当用户运行一个应用程序时,操作系统的加载程序就会查看可执行图形程序的标题,并抓取该子系转载 2010-12-07 17:21:00 · 420 阅读 · 0 评论 -
windows笔记-跨越进程边界共享内核对象【复制对象句柄】
<br />跨越进程边界共享内核对象有三种方法:对象句柄的继承性命名对象复制对象句柄<br /><br />复制对象句柄<br />共享跨越进程边界的内核对象的最后一个方法是使用BOOL DuplicateHandle(<br /> HANDLE hSourceProcessHandle,<br /> HANDLE hSourceHandle,<br /> HANDLE hTargetProcessHandle,<br /> PHANDLE phTargetHandle,转载 2010-12-08 09:20:00 · 437 阅读 · 0 评论 -
windows笔记-跨越进程边界共享内核对象【命名对象】
<br />跨越进程边界共享内核对象有三种方法:对象句柄的继承性命名对象复制对象句柄命名对象<br />共享跨越进程边界的内核对象的第二种方法是给对象命名,注意有些内核对象是不可以命名的,但多数内核对象可以命名。<br />下面的所有函数都可以创建命名的内核对象:HANDLE CreateMutex(<br /> PSLCURITY_ATTRIBUTES psa,<br /> BOOL bInitialOwner,<br /> PCTSTR pszName);<br /><b转载 2010-12-07 20:47:00 · 430 阅读 · 0 评论 -
windows笔记-【内核对象线程同步】事件内核对象
<br />在所有的内核对象中,事件内核对象是个最基本的对象。事件能够通知一个操作已经完成。<br />客户机和一个服务器,它们之间需要互相进行通信例子(vs2008 )<br />事件内核对象的组成<br />一个使用计数(与所有内核对象一样),<br />一个用于指明该事件是个自动重置的事件还是一个人工重置的事件的布尔值,<br />一个用于指明该事件处于已通知状态还是未通知状态的布尔值。<br /> <br />有两种不同类型的事件对象<br />一种是人工重置的事件,另一转载 2010-12-07 16:14:00 · 366 阅读 · 0 评论 -
windows笔记-内存映射文件与数据视图的相关性
<br />系统允许映射一个文件的相同数据的多个视图。只要映射相同的文件映射对象,系统就会确保映射的视图数据的相关性。<br />例如,如果你的应用程序改变了一个视图中的文件内容,那么所有其他视图均被更新以反映这个变化。这是因为尽管页面多次被映射到进程的虚拟地址空间,但是系统只将数据放在单个RAM页面上。如果多个进程映射单个数据文件的视图,那么数据仍然是相关的,因为在数据文件中,每个RAM页面只有一个实例——正是这个RAM页面被映射到多个进程的地址空间。<br /> 注意:Windows允许创建若转载 2010-12-07 15:02:00 · 444 阅读 · 0 评论 -
_variant_t
_variant_t 是什么数据类型??<br /><br />这个问题的答案比较广泛: <br /> 我所知道常用的 <br /> 1。在执行的SQL语句一般都是_bstr_t <br /> 2.Connection 中的RecordsAffected 为VARIANT <br /> 3.使用get_Value()获得的记录的值为 VAARIANT <br /> 等等。。。 <br /> _bstr_t 中记录了字符串的转载 2010-12-03 19:22:00 · 709 阅读 · 0 评论 -
C/C++ Runtime 多线程函数
<br />一 简单实例(来自codeprojct:http://www.codeproject.com/useritems/MultithreadingTutorial.asp)<br />主线程创建2个线程t1和t2,创建时2个线程就被挂起,后来调用ResumeThread恢复2个线程,是其开始执行,调用WaitForSingleObject等待2个线程执行完,然后推出主线程即结束进程。/**//* file Main.cpp<br /> *<br /> * This program原创 2010-12-04 10:07:00 · 601 阅读 · 0 评论 -
windows笔记-创建线程的另一个函数_beginthreadex
<br />在多线程环境中存在问题的C/C++运行期库变量和函数包括errno、_doserrno、strtok、_wcstok、strerror、_strerror、tmpnam、tmpfile、asctime、_wasctime、gmtime、_ecvt和_fcvt等。<br />所以如果使用上面的变量或函数的话,若要创建一个新线程,绝对不要调用操作系统的CreateThread函数,必须调C/C++运行期库函数_beginthreadex:<br /> <br />uintptr_t_begi转载 2010-12-04 09:03:00 · 509 阅读 · 0 评论 -
ubuntu 命令合集
<br />mkdir目录名创建一个目录<br />rmdir空目录名删除一个空目录<br />rm文件名文件名删除一个文件或多个文件<br />rm -rf非空目录名删除一个非空目录下的一切<br />touch文件名创建一个空文件<br /><br />重命名文件夹echWeb-技术社区5].O"?8H.I<br />执行格式: mv source destination<br /> <br />原创 2010-11-26 14:18:00 · 406 阅读 · 0 评论 -
Windows下return,exit和ExitProcess的区别和分析- -
<br />通常,我们为了使自己的程序结束,会在主函数中使用return或调用exit()。在windows下还有ExitProcess()和TerminateProcess()等函数。<br />本文的目的是比较以上几种结束程序的方式的区别,并分析其原理。<br /> <br />首先我们用一个例子来说明几种结束方式的区别。<br />测试环境为Windows XP HOME SP2,编译器为Visual Studio.net 2003<br />测试代码如下:<br />#include<br转载 2010-12-03 11:45:00 · 506 阅读 · 0 评论 -
windows笔记-创建线程的另一个函数_beginthreadex
<br />在多线程环境中存在问题的C/C++运行期库变量和函数包括errno、_doserrno、strtok、_wcstok、strerror、_strerror、tmpnam、tmpfile、asctime、_wasctime、gmtime、_ecvt和_fcvt等。<br />所以如果使用上面的变量或函数的话,若要创建一个新线程,绝对不要调用操作系统的CreateThread函数,必须调C/C++运行期库函数_beginthreadex:<br /> <br />uintptr_t_begi转载 2010-12-07 14:09:00 · 422 阅读 · 0 评论 -
windows笔记-内存映射文件
<br />Windows提供了3种进行内存管理的方法: <br />• 虚拟内存,最适合用来管理大型对象或结构数组。 <br />• 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据。 <br />• 内存堆栈,最适合用来管理大量的小对象。<br /> <br /> <br />内存映射文件内存映射文件与数据视图的相关性页文件支持的内存映射文件使用内存映射文件在进程之间共享数据<br /><br />内存映射文件可以用于3个不同转载 2010-12-07 14:57:00 · 338 阅读 · 0 评论 -
windows笔记-线程的一些性质
<br />调用CreateThread可使系统创建一个线程内核对象。该对象的初始使用计数是2(在线程停止运行和从CreateThread返回的句柄关闭之前,线程内核对象不会被撤消)。线程的内核对象的其他属性也被初始化,暂停计数被设置为1,退出代码始终为STILL_ACTIVE(0x103),该对象设置为未通知状态。<br /><br />一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间分配而来的。然后系统将两个值写入新线程的堆栈的上端(线程堆栈总是从内存的高地址向转载 2010-12-07 16:42:00 · 403 阅读 · 0 评论 -
windows笔记-内核对象
<br />有哪些内核对象?<br />如下:存取符号对象、事件对象、文件对象、文件映射对象、I / O 完成端口对象、作业对象、信箱对象、互斥对象、管道对象、进程对象、信标对象、线程对象和等待计时器对象等。这些对象都是通过调用函数来创建的。<br /> <br />什么是内核对象?<br />内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。有些数据成员(如安全性描述符、使用计数等)在所有对象类型中是相同的原创 2010-12-07 16:16:00 · 415 阅读 · 0 评论 -
windows笔记-【内核对象线程同步】等待定时器内核对象
<br />等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象。它们通常用来在某个时间执行某个操作。<br />创建等待定时器<br />HANDLECreateWaitableTimer(<br /> PSECURITY_ATTRIBUTES psa,<br /> BOOL fManualReset,<br /> PCTSTR pszName<br />);<br />psa和pszName这两个参数(见内核对象的安全性 和 跨越进程边界共享内核对转载 2010-12-07 16:12:00 · 388 阅读 · 0 评论 -
windows笔记-【内核对象线程同步】信标内核对象
<br />信标内核对象用于对资源进行计数。<br /> <br />vs2008代码下载信标内核对象的组成 <br />一个使用数量<br />一个是最大资源数量(用于标识信标能够控制的资源的最大数量)<br />一个是当前资源数量(用于标识当前可以使用的资源的数量)<br /> 信标的使用规则如下<br />• 如果当前资源的数量大于0,则发出信标信号。<br />• 如果当前资源数量是0,则不发出信标信号。<br />• 系统决不允许当前资源的数量为负值。<br />• 当前资源数量决转载 2010-12-07 16:03:00 · 505 阅读 · 0 评论 -
windows笔记-【内核对象线程同步】互斥对象内核对象
互斥对象(mutex)内核对象能够确保线程拥有对单个资源的互斥访问权。<br /> <br />互斥对象的组成<br />一个使用数量<br />一个线程ID(用于标识系统中的哪个线程当前拥有互斥对象)<br />一个递归计数器(用于指明该线程拥有互斥对象的次数)<br /> <br />互斥对象的使用规则如下<br />•如果线程ID是0(这是个无效ID),互斥对象不被任何线程所拥有,并且发出该互斥对象的通知信号。<br />•如果ID是个非0数字,那么一个线程就拥有互斥对象,并且不发出该转载 2010-12-07 15:48:00 · 412 阅读 · 0 评论 -
windows笔记-【内核对象线程同步】线程同步对象速查表
<br />对象<br />何时处于未通知状态<br />何时处于已通知状态<br />成功等待的副作用<br />进程<br />当进程仍然活动时<br />当进程终止运行时(ExitProcess,TerminateProcess)<br />无<br />线程<br />当线程仍然活动时<br />当线程终止运行时(ExitThread,TerminateThread)<br />无<br />作业<br />当作业的时间尚未结束时<br />当作业的时间已经结束时<br />无<br />文件<br转载 2010-12-07 15:36:00 · 512 阅读 · 0 评论 -
windows笔记-使用内存映射文件在进程之间共享数据
<br />数据共享方法是通过让两个或多个进程映射同一个文件映射对象的视图来实现的,这意味着它们将共享物理存储器的同一个页面。因此,当一个进程将数据写入一个共享文件映射对象的视图时,其他进程可以立即看到它们视图中的数据变更情况。<br /> <br />注意:如果多个进程共享单个文件映射对象,那么所有进程必须使用相同的名字来表示该文件映射对象。<br /> <br />//------------------------------------------------------------<br />转载 2010-12-07 15:25:00 · 479 阅读 · 0 评论 -
windows笔记-页文件支持的内存映射文件
<br />它不必调用CreateFile函数,只需要调用CreateFileMapping函数,并且传递INVALID_HANDLE_VALUE作为hFile参数。这将告诉系统,你不是创建其物理存储器驻留在磁盘上的文件中的文件映射对象,相反,你想让系统从它的页文件中提交物理存储器。分配的存储器的数量由CreateFileMapping函数的dwMaximumSizeHigh和dwMaximumSizeLow两个参数来决定。当创建了文件映射对象并且将它的一个视图映射到进程的地址空转载 2010-12-07 15:06:00 · 465 阅读 · 0 评论