自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (4)
  • 收藏
  • 关注

原创 原子操作

说明原子操作是CPU提供的特性,不是每个CPU都支持,各个CPU的支持和底层实现并不一样,下面的例子只以Intel 架构来说明例子#include <stdio.h>#include <pthread.h>/* type __sync_fetch_and_add (type *ptr, type value, ...) __sync_fetch_and_add() / __sync_fetch_and_sub() / __sync_fetc

2021-01-05 14:57:49 163

原创 2.1 数据结构-queue.h

1. 概述本文档要介绍的正是libevent中的queue.h文件中的一些数据结构, 这个文件是从一些操作系统中"借鉴"过来的, 是很经典的一个文件. 因为这里面的结构体中的定义格式是很多操作系统(包括Linux)中的双向循环列表和双向队列中的实现方式. 在大型的系统和开源项目中, 双向的数据结构用的稍微多点.我们在大学学过的数据结构中, 对于链表(单链表, 双链表, 单循环链表, 双循环链表)和队列(链队列)等的定义方式根深蒂固, 下文中讲到这种结构我就会进行一些对比.对于刚接触这种结构定义方式,

2020-11-22 16:07:19 1546

原创 1.0 CMakeLists.txt注解

cmake是什么cmake是一个生成工程文件的工具,生成的工程文件可以在各个平台上用开发工具来第二次编译。也就是说cmake并不是直接的编译工具,它只能生成对应平台的工程文件,比如:Windows上的Visual studio的sln,Linux上的makefile等。作为一个中间层的工具,cmake集成了很多内置的命令和变量,这也是我们在阅读cmake源码时候应该注意的。cmake的源码文件是CMakeLists.txt文件,在下级目录中也有需要生成成makefile的情况下,需要在每个目录中添加CM

2020-11-21 17:06:37 1227

原创 C++实现智能指针的简单案例

以下案例只是一个简单的小程序,实现过程中主要是将辅助计数类当做共有的属性#include using namespace std;template class adv_smart_pointer;template class ref_cnt{ friend class adv_smart_pointer;public: ref_cnt(T *p) : data_

2017-03-23 18:14:44 349

原创 Linux--多线程条件变量使用

条件变量是为了控制多线程的互斥问题,同时个人觉得有点多线程协作同步的意思在里面。消费者线程等待取生产者线程提供的资源,生产者线程生产产品后就通知唤醒消费者线程进行资源获取。一般条件变量与互斥量共用。#include #include #include #include #include typedef struct product_node{ char name[32]; i

2017-03-10 09:36:37 320

原创 Linux--多线程读写锁问题

下面的案例是多个线程访问一个公共缓冲的处理,采用读写锁。需要注意的是代码中注释的地方。起初是将sleep放在unlock之前,这样的问题是,每次读线程读取完之后就直接睡眠导致写线程得到不到锁。由于写线程的写锁是独占的,需要保证读写锁没有被其他线程占用。#include #include #include #include #include pthread_rwlock_t

2017-03-09 18:06:13 430

原创 Linux--多线程访问全局变量互斥的例子

以下案例是两个线程同时访问一个全局worker变量,并分别对里面的成员counter进行增长#include #include #include #include #include #define MAX_NUM 5000typedef struct { int counter; pthread_mutex_t counter_mutex;}COUNTER;

2017-03-09 16:12:38 5745

原创 Linux--多线程拷贝文件案例及其传参说明

下面的简单案例模拟了多线程拷贝一个文件#include #include #include #include #include #include #include #include #include #define MAX_PATH 255#define BLOCK_SIZE 4096typedef struct { int srcFd; int dstFd;

2017-03-08 17:41:26 1141

原创 Linux--线程,pthread_detach使用

需要注意的是,在线程中使用pthread_detach之后就不能用pthread_join了,否则会出现Invalid argument错误#include #include #include void *th_run(void *arg){ int n = 3; while(n--) { printf("thread run\n"); sleep(1); }}

2017-03-07 18:17:06 1488 1

原创 ubuntu安装POSIX文档出现问题

在Linux程序中需要使用pthread库,但是man pthread_create的时候出现No manual entry for pthread_create需要安装sudo apt-get install manpages-posix manpages-posix-dev但是问题是,在我的ubuntu系统上输入上面的命令,得到的结果是:Reading package li

2017-03-07 14:42:15 1784 1

原创 Linux--守护进程

以下例子是创建一个守护进程,间隔5s在/tmp目录下写文件#include #include #include #include #include #include #include #include void daemonize(){ //1. 创建一个子进程,父进程退出,主要就是为setsid做准备 pid_t pid; pid = fork(); if (pi

2017-03-07 11:48:02 200

原创 Linux--setsid函数

调用setsid函数的进程需要满足以下条件:1. 不是组长进程2. 有对应的创建session权限调用setsid函数后的进程:1. 成为一个组的组长进程2. 成为一个会话的会话首进程3. 放弃了控制终端#include #include #include int main(int argc, char *argv[]){ pid_t pid

2017-03-07 11:14:28 536

原创 Linux--信号处理:在某个信号发生时屏蔽其他的信号

在下面代码中,在SIGINT信号处理过程中,屏蔽SIGQUIT信号的发生,信号SIGQUIT直到SIGINT的信号处理函数完毕后才能被处理#include #include #include #include #include void sig_handle(int signo){ int i = 5; printf("catch signal %d\n", (int)sig

2017-03-07 10:48:49 1235 1

原创 Linux--信号时序竞态

1. 有问题的mysleep函数,主要注释部分的解释#include #include #include #include #include void sig_handle(int signo){ }unsigned int mysleep(unsigned int nsec){ //int sigaction(int signum, const struct sig

2017-03-07 09:38:03 606

原创 Linux--父子进程同步协作

以下代码是父子进程交替打印变量counter的值。由于fork之后子进程会复制父进程的堆栈,信号处理函数,信号屏蔽字,在下面的程序会根据counter的不同初值进行分别。#include #include #include #include #include sigset_t newset, zeroset;static int counter = 1;static int s

2017-03-06 14:57:34 2107

原创 Linux--mmap实现进程间通信

服务端程序#include #include #include #include #include #include #include #include int main(int argc, char **argv){ static int couter = 0; if (argc != 2) { printf("usage: %s file_name\n",

2017-03-05 12:17:22 461

原创 Linux--管道

1. 无名管道,只适用于有亲缘关系的进程之间通信#include #include /* Obtain O_* constant definitions */#include #include #include #define MAX_PATH 255/* server: 接受客户端发送过来的下载文件请求,如果文件存在,则直接把数据发送给客户端 如

2017-03-05 09:15:20 266

原创 Linux--多进程拷贝一个文件

下面程序是一个精简版的多进程拷贝文件,要求源文件是一个文件,而不是一个目录。程序注意点是,必须在创建进程后在进程中打开源和目的文件,否则,通过fork之后,多个进程会同时共享一个文件表项,导致读写文件混乱。由于每个进程分割地拷贝源文件的各个部分,所以不会出现写入文件混乱#include #include #include #include #include #includ

2017-03-01 18:00:15 2482

原创 Linux--简单copy程序

1. 测试main函数#include #include #include "copy.h"int main(int argc, char *argv[]){ if (argc != 3) { printf("usage: %s src dst\n", argv[0]); return -1; } char src[MAX_PATH] = {0}; char

2017-02-24 15:57:15 1069

原创 Linux创建一个空洞文件

在使用迅雷下载的时候,查看迅雷新建的文件发现该文件大小和要下载的文件一样大其实迅雷事先在本地创建了一个与要下载一样大的临时文件,然后后面通过多线程方式从网络上下载这个文件,一点点填入那个临时文件创建空洞文件代码如下:#include #include #include #include #define N_M 10*1024*1024int main(int argc

2017-02-23 15:58:54 2277

原创 Linux -- fcntl修改文件状态标志

以下只是使用fcntl改变标准输入的阻塞模式,改成非阻塞的模式#include #include #include #include #include #include int main(int argc, char **argv){ char buffer[1024] = {0}; int flags; flags = fcntl(STDIN_FILENO, F_

2017-02-10 10:35:37 588

原创 Linux -- 文件I/O

Linux每个进程启动默认会打开三个文件描述符0, 1, 2,分别代表"标准输入", “标准输出”, “标准出错”。自然地,可以在程序中控制这三个文件描述符的开关闭。下面两个程序分别是“重定向标准输入到文件“和”标准输出到文件”1. 重定向标准输入到文件#include #include #include int main(){ int fd; close(STD

2017-02-09 17:15:05 223

原创 VC调试boost::asio::async_send_to时候的一个问题(_Debug_message assert的异常)

最近遇到一个奇怪的问题,在VS2010中调试BOOST::ASIO的时候会出现如题说明的异常,在网上找了一圈,有个哥们以前遇到过 http://bbs.csdn.net/topics/360059975,但是没给出解决方案。下面也没有给出解决方案,只是说明了使用方法代码中使用的是如下的语句:socket_.async_send_to(boost::asio::buffer( strSi

2016-09-19 16:00:37 3413 2

原创 Windows平台调用dos命令的程序

#include using namespace std;int main(int argc, char* argv[]){char srcFileName[255] = {0};char desFileName[255] = {0};cout >";cin >> srcFileName;fflush(stdin);cout >";c

2015-07-06 15:32:42 393

原创 APUE的小问题

查看下面的几个小例子,分析Linux中怎么区分参数的个数的(程序中设置了参数为2否则出错)Administrator@gzhang ~/gzhang/day09$ ./a.exe 1argv[1]=1read and writeAdministrator@gzhang ~/gzhang/day09$ ./a.exe 0 argv[1]=0read o

2015-06-09 16:10:44 265

原创 UNIX/Linux函数lseek说明

1.        lseek返回当前文件所在位置距离文件开始处的偏移    lseek的原型    off_t lseek(int filedes, off_t offset, int whence);    filedes:代表文件描述符    offset:通过第三个参数标记相对偏移量    whence:取值SEEK_SET(文件开始处),SEEK_CUR(文件当前

2015-06-04 18:16:51 1384

原创 分享几个网站,对于IT人事可能有点帮助

一. 免费视频网站(非常感谢这些网站的无私奉献)1. 教程之家http://www.jczhijia.com/2. 网易公开课http://open.163.com/3. 网易云课堂(大部分免费)http://study.163.com/4. 第一教程网http://video.1kejian.com/5. 超星视频网站(有些视频看不了全部,有个软件可以下载全部

2015-05-29 09:57:43 712

原创 关于fork的小问题

在阅读APUE的时候,试着在Cygwin中测试一个源程序,如下 1 #include   2 #include   3 #include   4 #include   5  6 #define     MAXLINE     512  7 static void sig_int( int );  8 int main ( int argc, char *argv[]

2015-05-26 10:28:59 633

原创 VC6.0通过ADO调用SQL Server 2000的存储过程出现参数过多的问题

VC6.0通过ADO调用SQL Server 2000的存储过程出现参数过多的问题今天在做biye

2014-04-06 20:11:37 863 1

转载 模态窗口建立时隐藏

模态窗口建立时隐藏在做毕业设计的时候遇到一个问题,我在VC中通过主界面产生一个窗口(其实是一个进程),由于一直需要该进程在整个生命周期中都存在,所以该窗口使用dlg.DoModal()的方式来不消灭。但是我的目的是想让它成为后台的进程,而不想它出现窗口界面。这时候下面的方法可以用了:模态窗口一创建后就会显示,就算设置WS_VISIBLE属性或在OnInitDialog加入S

2014-03-25 13:56:34 1729

原创 关于虚拟主机的小问题

若虚拟主机后出现,Forbidden的提示的时候,可能是因为下面的主机设置有限制,默认的情况下是Deny from all,这时是不允许你改动主机的主页地址到其他的地方的,可以改为Allow from all 改正前    Options FollowSymLinks    AllowOverride None    Order deny,allow    Deny

2013-07-04 22:31:38 485

编译原理(鲸书)

鲸书(Whale book) 英文名:Advanced Compiler Design and Implementation 作者:Steven S.Muchnick 中文名:高级编译器设计与实现

2014-06-12

编译原理(虎书)

虎书(Tiger book) 英文名:Modern Compiler Implementation in C 作者:Andrew W.Appel,with Jens Palsberg 中文名:现代编译原理-C语言描述

2014-06-12

截图工具源码

一个截图工具的源码 我也是看的别人的 等有天我自己开发一个

2013-06-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除