- 博客(90)
- 资源 (12)
- 收藏
- 关注
原创 GDB调试技巧
工具程序gdb是GNU调试器。为了能调试程序,编译时必须指定GCC的-g选项将源码与可执行代码联系起来。将程序载入调试器fibonacci.cint current;int next;int nextnext;void setstart(void) { current = 0; next = 1;}void calcnext(void) { nex
2017-12-12 12:32:07
1124
原创 VS错误收集
LINK : fatal error LNK1117: 选项“mapinfo:lines”中的语法错误解决方法: 找到”链接器” —>”命令行”,把“其他选项“里面的 /mapinfo:lines 去掉就行了错误 183 error LNK1104: 无法打开文件“mfc42.lib”
2017-04-08 18:56:24
1204
原创 GCC预处理程序规则
/* 限定只有在定义了__unix__的情况下才能成功编译 */#ifndef __unix__#error "This section will only work on UNIX systems"#endif/* 插入指定的文件 */#include <errno.h>#include <stdio.h>#include <stdlib.h>/* 两值中的最小值 */#define
2017-02-22 17:14:25
551
原创 ICMP协议与ping
原始套接字原始套接字提供普通TCP和UDP套接字所不提供的能力。具体如下:进程可以使用原始套接字读与写ICMPv4、ICMPv6和IGMPv4等分组。ping程序使用原始套接字发送ICMP回射请求并接收ICMP回射应答。#include <netinet/in.h>int sockfd; // 使用原始套接字创建ICMPv4套接字sockfd = socket(AF_INET, SOCK_RA
2017-02-21 13:08:46
1799
原创 套接字选项
#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);对于T
2017-02-14 16:16:17
3123
原创 广播与多播
多播支持在IPv4中是可选的,在IPv6中却是必需的。IPv6不支持广播。使用广播的任何IPv4应用程序一旦移植到IPv6就必须改用多播重新编写。广播和多播要求用于UDP或原始IP,它们不能用于TCP。广播广播的用途之一是在本地子网定位一个服务器主机,前提是已知或认定这个服务器主机位于本地子网,但是不知道它的单播IP地址。这种操作也称为资源发现。 源自Berkeley的内核不允
2017-02-10 11:47:42
1995
原创 套接字I/O
阻塞和非阻塞套接字套接字的默认状态是阻塞的,可能阻塞的套接字调用可分为以下四类:输入操作,包括read、readv、recv、recvfrom和recvmsg共5个函数。 阻塞的TCP套接字:如果该套接字接收缓冲区中没有数据可读,进程将被投入睡眠,直到有一些数据(单个字节或一个TCP分节等)到达。阻塞的UDP套接字:如果该套接字接收缓冲区为空,对它调用输入函数的进程将被投入睡眠,直到有UDP数
2017-01-23 19:06:39
571
原创 UDP客户/服务器
一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是迭代的(单个进程/线程就得处理所有客户)。UDP套接字调用connect(不同于
2017-01-19 17:12:56
3781
原创 TCP客户/服务器
《UNIX Network Programming Volume1: The Socket Networking API, Third Edition》 W.Richard Stevens / Bill Fenner / Andrew M.Rudoff字节排序函数#include <netinet/in.h>uint16_t htons(uint16_t host16bitvalue);
2017-01-16 15:25:52
4437
翻译 同步机制——“读写锁“的实现
在《Multithreading Applications in Win32》(Jim Beveridge & Robert Wiener)一书中提及读写锁的实现时,作者阐述尝试了网络上近乎全部的实现发现均存在问题,后来参考一篇已发表的文章《Concurrent Control with “Readers” and “Writers”》使用Win32基础同步机制实现了读写锁。由于Windows自Vi
2017-01-15 19:18:18
2180
原创 多字节整数字节序(小端/大端)
>《UNIX Network Programming Volume1: The Socket Networking API, Third Edition》>W.Richard Stevens / Bill Fenner / Andrew M.Rudoff考虑内存中存储一个16位整数,它由2个字节组成,因此存储这两个字节有两种方法:- **小端字节序**——将低序字节存储在起始地址;- **大端字
2017-01-13 17:07:18
3376
原创 TCP和UDP概述
《UNIX Network Programming Volume1: The Socket Networking API, Third Edition》 W.Richard Stevens / Bill Fenner / Andrew M.RudoffTCP和UDP概述 多字节整数字节序(小端/大端) 套接字I/O 套接字选项 TCP客户/服务器 UDP客户/服务器 广播与多播 I
2017-01-12 16:56:11
1272
原创 POSIX针对pthread线程的调整
《POSIX多线程程序设计》——David R.ButenPthreads改变了很多POSIX进程函数的含义。fork应尽量避免在一个多线程的程序中使用fork。。 当多线程进程调用fork创造子进程时,Pthreads指定只有那个调用fork的线程在子进程内存在。子进程拥有与父进程相同的互斥量、线程私有数据键等。fork调用不会影响互斥量的状态。如果它在父进程中被锁住,则它在子进程中被锁!ex
2017-01-10 11:33:23
911
原创 pthread线程
主线程是特殊的当c语言运行时,首先执行main函数,这个特殊的执行流被称为“主线程”。主线程的特殊性在于Pthreads在main函数返回阶段保留了传统UNIX进程行为。即当进程结束时,所有线程、状态和它们的工作结果都会简单的“蒸发”——没有理由要清理什么。在大多数系统中,主线程运行在默认进程堆栈上,该堆栈可以增长到足够的尺寸;而在某些系统中,普通线程的堆栈空间是受限的,如果线程堆栈溢出,则程序会因
2017-01-05 14:04:40
547
原创 同步和异步例子(linux)
同步alarm.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>int main(int argc, char *argv[]) { int seconds; char line[128]; char message[64]; while (1) {
2017-01-04 20:08:55
2742
1
原创 vim常用命令
set nu 或set number // 显示行号; set nonu 或set nonumber // 关闭显示行号; w !sudo tee % // 在没有写权限的用户下编辑后保存命令 相关错误提示:E45: ‘readonly’ option is set (add ! to override):%s/vivian/sky/或g/vivian/s//sky/ // 替换每一行的第一个
2017-01-04 19:45:50
575
原创 线程术语
可重入函数与线程安全函数一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 可重入与线程安全并不等同。一般说来,可重入的函数一定是线程安全的,但反过来不一定成立。如果一个函数中用到了全局或静态变量,那么它不是线程安全的,也不是可重入的; 如果我们对它加以改进,在访问全局或静态变量时使用互斥量或信号量等方式加锁,则可以使它变成线程安全的,但此时它仍然是不可重入的,
2017-01-04 15:30:09
446
原创 HTTP和URL协议
HTTP深入浅出 http请求URL中“#” “?” &“”号的作用 关于URL编码在线HTTP POST/GET接口测试工具 - aTool在线工具
2016-12-28 16:57:20
573
原创 Win32——_beginthread()、CreateThread()、_beginthreadex()
《Win32多线程程序设计》–Jim Beveridge & Robert WienerC runtime library参考:C Runtime Library单线程版本: 当 C runtime library 于 20 世纪 70 年代产生出来时,内存容量还很小,多任务是个新奇观念,更别提什么多线程了。C runtime library 使用数个全局变量和静态变量,这可能在多线程程序中彼此
2016-12-28 11:40:11
819
原创 Notepad++正则表达式替换规则
例子: 192.168.2.11 –> [192.168.2.11] 192.168.2.12 –> [192.168.2.12] 192.168.2.123 –> [192.168.2.123] 查找目标: 192.168.2.([0-9]{2,3}) –> [192.168.2.\1]
2016-12-27 11:13:23
2495
原创 c运算符优先级(*/++)、const、二维数组、指针
一元运算符*和++具有相等的优先级,结合使用时是从右向左进行的。 total += *start++ // 先把指针指向的数据加到total上,再使指针自增1 total += (*start)++ // 先把指针指向的数据加到total上,再使指针指向的数据自增1 total += *++start //指针先增加1,再把指针指向的数据加到total上指向常量的指针不能用于修改数值 dou
2016-12-22 19:56:25
1408
2
原创 Win32线程——同步机制
《Win32多线程程序设计》–Jim Beveridge & Robert Wiener同步(synchronous):当程序1调用程序2时,程序1 停下不动,直到程序2完成回到程序1来,程序1才继续下去;SendMessage() 根本就像是“直接调用窗口之窗口函数”,除非等该窗口函数结束,是不会回到原调用点的,所以它是同步行为。异步(asynchronous):如果程序1调用程序2后,径自继
2016-12-17 16:55:16
3401
原创 Win32线程——优先权
《Win32多线程程序设计》–Jim Beveridge & Robert WienerWin32 优先权是以数值表现的,并以进程的“优先权类别(priority class)”、线程的“优先权层级 (priority level)”和操作系统当时采用的“动态提升(Dynamic Boost)”作为计算基准。 所有因素放在一起,最后获得一个 0~31 的数值。拥有最高优先权之线程,即为下一个将执行起
2016-12-16 18:11:30
1128
原创 Win32线程——在某个线程内终止另一个正在运行的线程(1)
《Win32多线程程序设计》–Jim Beveridge & Robert Wiener 对于多线程程序,如果用户企图结束程序(主线程)时,子线程尚未完成工作,怎么办? 结束一个线程,听起来好容易,但是结束程序必须按次序进行,以避免发生 race conditions。让程序依次序进行是非常重要的,特别是在程序要结束之前。结束一个程序就好像拆除一栋建筑物一样,在你以推土机轧平它之前,你
2016-12-16 17:35:57
5967
原创 Win32线程——等待另一个线程结束
《Win32多线程程序设计》–Jim Beveridge & Robert Wiener “等待某个什么东西”是线程常常需要做的事。等待是线程的“必要之恶”。 如果你没有等待线程结束就莽撞地结束程序,线程会被系统强制结束掉——在它完成它的工作之前。 由于让线程停工是操作系统的责任,很合理地我们会认为操作系统也有责任让其他线程知道某个线程停工了。Sleep()这个函数要求操作系统中止
2016-12-14 21:14:12
5474
3
原创 Win32线程——在某个线程内终止另一个正在运行的线程(2)(Event对象)
《Win32多线程程序设计》 Win32 中最具弹性的同步机制就属 events 对象了。 Event 对象是一种核心对象,它的唯一目的就是成为激发状态或未激发状态。这两种状态全由程序来控制,不会成为Wait…() 函数的副作用。 Event 对象之所以有大用途,正是因为它们的状态完全在你掌控之下。Mutexes 和 sem aphores 就不一样了,它们的状态会因为诸如WaitForS
2016-12-14 00:37:06
2771
原创 MFC隐藏窗口及图标
隐藏窗口声明:BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags); 示例:SetWindowPos(&CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_HIDEWINDOW); HWND_NOTOPMOST:值为-2,将窗口置于所有非顶
2016-12-13 23:49:56
2651
原创 Windows定时器
Win32范例1: 在当前进程内创建一个延时1s的定时器,定时器ID为SetTimer的返回值。使用GetMessage捕获WM_TIMER 消息。#include <stdio.h>#include <time.h>#include <Windows.h>int main(void) { UINT_PTR timeID = SetTimer(NULL, 0, 1000, NULL
2016-12-13 19:35:19
572
原创 #pragma、条件编译预处理指令用法(Visual Studio)
只被编译一次#pragma once结构体对齐#pragma pack(1) (结构体中数据成员按1字节对齐)加载静态链接库#pragma comment(lib, "gdiplus") (使用gdi+,调用gdiplus.lib)忽略静态链接库(用于消除静态库冲突)#pragma comment(linker, "/NODEFAULTLIB:libcd.lib") (vs2005以上项目中调
2016-12-12 19:19:22
3250
原创 printf宽度控制和精度控制
参考文章:printf “%.*s” printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个*代替那个常量,然后在后面提供变量给*。一般形式: printf("格式控制字符串",输出列表); 格式控制字符串形式: [标志][输出最小宽度][.精度][长度][类型]类型d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出
2016-12-09 13:52:01
33483
1
原创 文件流中读行的正确使用(fgets、feof、ferror)
char *fgets(char *buf, int bufsize, FILE *stream);功能fgets函数用来从stream所指文件中读入bufsize-1个字符放入buf为起始地址的空间内;如果在未读满bufsize-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,调用fgets函数时,最多只能读入bufsize-
2016-12-04 14:02:43
10539
原创 MFC回车键和Esc键默认退出程序的问题
PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码.声明:virtual BOOL PreTranslateMessage(MSG* pMsg);拦截回车和ESC键:BOOL C***Dlg::PreTranslateMessage(MSG* pMsg
2016-11-29 10:09:50
583
原创 字符串:多字节与宽字节转换
头文件#include <stdlib.h> mbstowcs 多字节字符串转换为宽字符串 wcstombs 宽字符串转换为多字节字符串使用注意对于 mbstowcs 函数来说,它需要知道多字节的编码类型才能正确的将其转换成宽字节的 unicode,很可惜这个编码类型并没有体现在函数的参数列表里,而是隐含依赖全局的 locale 。更加不幸的是,全局 locale 默认没有使用系统当前语言,
2016-11-23 14:41:38
3779
2
原创 MFC xp style界面
方法1:.manifest文件相关介绍: 一分钟明白 VS manifest 原理 使用manifest实现XP风格界面 Application Manifests(微软官方介绍)XPStyle.manifest :<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-micro
2016-11-23 02:23:46
487
原创 MFC 文件夹对话框
浏览文件夹对话框 SHBrowseForFolder Displays a dialog box that enables the user to select a Shell folder. SHGetPathFromIDList Converts an item identifier list to a file system path. BOOL BrowseFolderContr
2016-11-21 22:31:54
478
转载 windows获取控制台窗口的句柄
全局声明: typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)(); PROCGETCONSOLEWINDOW GetConsoleWindow; Main()中动态载入API函数GetConsoleWindow: HMODULE hKernel32 = GetModuleHandle(“kernel32”); GetConsoleWindow = (P
2016-11-02 12:27:38
3997
原创 Oracle
数据字典数据字典提供了数据库的一些系统信息。它是只读表和视图的集合,数据字典的所有者是sys用户。其信息是从数据文件中获取的,用户在上面只能执行查询操作,其维护和修改是系统自动完成的.数据字典基表:存储数据库的基本信息,普通用户不能访问数据字典的基表 数据字典视图:数据字典视图是基于数据字典基表所建立的视图,普通用户可以查询数据字典视图获取系统信息。表 表名 含义 user_tables
2016-09-20 18:15:12
362
原创 bfg.jar(清除 GIT commit 所有历史记录)
清除所有commit记录:BFG Repo-Cleaner(需要安装java SDK才能运行)详情:处理GitHub不允许上传大于100M文件问题
2016-09-01 23:56:06
3523
SQLiteExpertProfessional&SQLiteSpy&SQLiteStudio(附文档和源码)
2017-01-19
Concurrent Control with “Readers” and “Writers”
2017-01-15
基于 MFC 对话框的 Excel 辅助工具
2015-08-24
青鸟消防辅助编程工具.exe
2015-08-23
一个非常简单的对话框程序
2015-08-22
基于Windows API与C++的俄罗斯方块
2015-04-24
Dosbox + MASM各个版本 + 教程
2013-10-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人