随笔分类 -  C/C++

C/C++编程
摘要:1.假设有两个线程 A线程负责输出奇数。B线程负责输出偶数。2.当A线程进入锁定状态是,主线程突然异常将A线程停止,这时将导致B线程也无法继续执行,处于死锁状态。如下代码:#include #include #include pthread_mutex_t m;void *runodd(void *d){ int i=0; for(i=1;;i+=2) { pthread_mutex_lock(&m); printf("奇数:%d\n",i); usleep(... 阅读全文
posted @ 2014-03-14 17:57 走路到纽约 阅读(8341) 评论(1) 推荐(1)
摘要:一、读取/etc/hosts 几个函数头文件1.void sethostent(int stayopen);//开打/etc/hosts 配置文件2.struct hostent * gethostent(void);//读取配置文件3.void enthostent(void);//关闭 /etc/hosts 文件二、读取/etc/protocols文件的几个函数1.struct protoent *getprotobyname(cosnt char *name);struct protent{ char *p_name; char **p_aliases; int p_proto; ... 阅读全文
posted @ 2014-03-06 12:52 走路到纽约 阅读(1034) 评论(0) 推荐(0)
摘要:编程步骤:1.创建共享消息队列/得到消息队列2.操作消息队列(发送、接收等) 3.删除队列案例应用:创建两个进程A、B其中A 如下:#include #include #include #include #include #include struct msgbuf{ long type; char data[32];};main(){ key_t key; int msgid; int i; struct msgbuf msg; //1创建消息队列 key=ftok(".",200); if(key==-1) printf("f... 阅读全文
posted @ 2014-03-05 09:35 走路到纽约 阅读(667) 评论(0) 推荐(0)
摘要:编程步骤:1.创建共享内存,得到一个共享内存ID(该ID一般大于50000)2.把ID映射到虚拟地址(也称为“挂载”)3.操作共享内存4.卸载虚拟地址5.删除共享内存应用案例:建立2个进程 A 和B 。其中A,创建共享内存,并且修改内存数据。#include #include #include #include #include #include #include key_t key;int shmid;int *p;int i=0;void deal(int s){ if(s==SIGINT) { //4.卸载共享内存shmdt shmdt(p); ... 阅读全文
posted @ 2014-03-05 09:03 走路到纽约 阅读(1158) 评论(0) 推荐(0)
摘要:#include #include #include #include void handle(int s){ printf("外部用户中断处理...!\n"); sleep(5); printf("外部用户中断处理结束!\n");}main(){ int sum=0; int i; sigset_t sigs,sigt,sigu; sigemptyset(&sigs); sigemptyset(&sigt); sigemptyset(&sigu); si... 阅读全文
posted @ 2014-03-03 22:50 走路到纽约 阅读(3370) 评论(0) 推荐(0)
摘要:gcc和g++都是GNU的一个编译器;这两者的区别:1.从源文件上看,对于文件后缀(扩展名)为.c的test.c文件,gcc会把它看成是C程序,而g++则会把它看成是C++程序;而对于文件后缀(扩展名)为.cpp的test.cpp文件,gcc和g++都会把它看成是C++程序;注意:虽然C++是C的超集,但是两者在语法要求上还是有区别的,C++的语法要求更严谨一些;2.从编译器角度看,在编译阶段,g++会自动调用gcc,对于编译C++代码,两者是等价的,但是由于gcc不会自动调用C++程序所使用的库进行链接,所以需要使用g++来编译或者是在gcc的命令行加上对C++库的链接-lstdc++;3. 阅读全文
posted @ 2014-02-21 15:43 走路到纽约 阅读(503) 评论(0) 推荐(0)
摘要:int main(){ time_t nowTime; time(&nowTime);//获取当前时间(世界时间)//这种写法也一样nowTime=time(NULL) ; //如果要转化为本地时间struct tm *t=localtime(&nowTime); long t=nowTime; cout<<t<<endl; char strTmptime[9]; sprintf(strTmptime,"%X",t);//十六进制输出 cout<<strTmptime<<endl; return 0;} 阅读全文
posted @ 2014-01-15 15:55 走路到纽约 阅读(1580) 评论(0) 推荐(1)
摘要:原文:http://blog.csdn.net/shallwake/article/details/5265287首先,介绍几种常见的I/O模型及其区别,如下:blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions)blocking I/O 这个不用多解释吧,阻塞套接字。下图是它调用过程的图示:重点解释下上图,下面例子都会讲到。首先application调用 recvfrom()转入kernel, 阅读全文
posted @ 2014-01-14 09:58 走路到纽约 阅读(5985) 评论(2) 推荐(1)
摘要:是在浏览器项目中的IDispatch调用QueryInterface([in] REFIID riid, [out] void **ppvObject);认识的REFIID,由于看声明说riid唯一的标识了一个COM接口,然后ppvObject就接受该接口类的对象指针,所以我想弄明白REFIID的含义。 typedef const IID& REFIID; REFIID = Reference of IID IID = GUID 其中,GUID定义如下:typedef struct _GUID { DWORD Data1; ... 阅读全文
posted @ 2013-12-28 22:17 走路到纽约 阅读(2289) 评论(0) 推荐(1)
摘要:使用socket写代码主要是要看自己的需求是什么。 如果通信时,内容很重要就要使TCP方式。 如果用户数太多,可能就要使用UDP方式了。 在TCP模式下,最简单的方式就是这样的,使阻塞方式: 服务端: 1.初始化socket环境,创建socket 2.梆定一个端口 3.开始监听 4.接收客户端 5.接收到客户端之后,使用这个socket来与这个客户通信#include "stdAfx.h" #include #include #include using namespace std;#pragma comment(lib, "ws2_32.lib") # 阅读全文
posted @ 2013-06-27 15:10 走路到纽约 阅读(3825) 评论(1) 推荐(1)
摘要:1.CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. 函功能描述:创建或打开一个命名的或无名的事件对象。 HANDLE m_hExit; m_hExit=CreateEvent( NULL, TRUE, FALSE, NULL ); EVENT有两种状态:发信号,不发信号。2.SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号3.WaitForSingleObject()等待。直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,也可以是其它内核对象。————————————... 阅读全文
posted @ 2013-06-26 15:35 走路到纽约 阅读(14624) 评论(0) 推荐(4)
摘要:_beginThreadex创建多线程解读一、需要的头文件支持#include // for _beginthread()需要的设置:ProjectàSetting-->C/C++-->User run-time library 选择Debug Multithreaded 或者Multithreaded。即使用: MT或MTD。#include #include // for STL string class#include // for HANDLE#include // for _beginthread()using nam... 阅读全文
posted @ 2013-06-26 10:25 走路到纽约 阅读(489) 评论(0) 推荐(0)
摘要:Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex-----------------------------------------------------------------------------------(nul) 0 0000 0x00 | (sp) 32 0040 0x20 | @ 64 0100 0x40 | ` 96 0140 0x60(soh) 1 0001 0x01 | ! 33 0041 0x21 | A 65 ... 阅读全文
posted @ 2013-05-23 17:43 走路到纽约 阅读(502) 评论(0) 推荐(0)
摘要:在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: (1)格式化字符串上。 printf 和sprintf 都使用格式化字符... 阅读全文
posted @ 2013-05-23 17:41 走路到纽约 阅读(1405) 评论(0) 推荐(0)
摘要:1.dll 项目// Dll1.cpp : 定义 DLL 应用程序的入口点。//#include "stdafx.h"extern "C"_declspec(dllexport)void maopao(int *p,int count);void maopao(int *p,int count){ int temp=0; for(int i=1;i=i;j--) { if(p[j]>p[j-1]) { temp=p[j]; p[j]=p[j-1]; p[j-1]=... 阅读全文
posted @ 2013-05-20 14:47 走路到纽约 阅读(567) 评论(0) 推荐(0)