C/C++
Blaider
这个作者很懒,什么都没留下…
展开
-
Linux 10分钟VGA显示器自动黑屏解决方法
1、内核层解决将driver/char/vt.c中的blankinterval值改成0。 2、应用层解决 #include #include #include #include #include int main(){ int f; f = open("/dev/tty1", O_RDWR); write(f, "\033[9;0原创 2014-11-26 16:12:26 · 5218 阅读 · 0 评论 -
GCC选项_-Wl,-soname
-Wl选项告诉编译器将后面的参数传递给链接器。-soname则指定了动态库的soname(简单共享名,Short for shared object name)soname的关键功能是它提供了兼容性的标准:当要升级系统中的一个库时,并且新库的soname和老库的soname一样,用旧库链接生成的程序使用新库依然能正常运行。这个特性使得在Linux下,升级使得共享库的程序和定位错误变得十原创 2014-10-29 16:08:48 · 811 阅读 · 0 评论 -
Linux C语言查找当前程序运行目录
有时候需要从程序运行目录中获取配置文件,此时就是读取程序目录原创 2014-11-13 16:14:36 · 1959 阅读 · 0 评论 -
Linux C语言删除文件
有时候需要原创 2014-11-13 15:55:48 · 17138 阅读 · 0 评论 -
Linux C语言自己动手写日志生成函数
有时候需要自己把日志信息保存到日志文件中,没有找到现成原创 2014-11-13 09:39:49 · 6916 阅读 · 0 评论 -
Makefile 中:= ?= += =的区别
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hello World! First!”endif原创 2014-09-29 14:00:36 · 604 阅读 · 0 评论 -
Linux下C语言获取某分区剩余空间大小
获取空间大小,可以直接使用系统提供的statfs直接获取原创 2014-11-07 18:23:14 · 10435 阅读 · 0 评论 -
Linux下在C语言中获取硬盘大小
由于系统中没有现成的代码可以直接获取某个硬盘的大小,此时可以原创 2014-11-07 18:20:25 · 3492 阅读 · 0 评论 -
Linux下串口通讯编程
由于串口通讯需要自己写代码进行测试,同时要轮询测试各波特率原创 2014-11-07 18:07:29 · 955 阅读 · 0 评论 -
Makefile(或者shell)的变量通过gcc的-D宏定义选项传递给C源文件
在一些特别的场合需要把Makefile中定义的变量作为C源代码的初始值.比如__DATE__宏是C已经预定义的宏,但有时候不喜欢该宏的日期格式,那么可以自己做一个。举例如下:Makefile内容如下:=================================================STR_A="Hello!"STR_B=$(s原创 2014-09-23 15:51:51 · 1276 阅读 · 0 评论 -
Makefile 连接静态库注意事项
Linux的静态库是以.a结尾的,要连接静态库有两种方法,一种是在编译命令最后直接加上库路径/库名称。例如你的库在绝对目录/lib/libtest.a下面你就可以这样来编译$(CC) $(CFLAGS) $^ -o $@ /lib/libtest.a另外一种方法是,你可以用-L制定库德路径,用-l指定库的名称例如库的名称为libtest.a 那么就用-ltest原创 2014-09-18 13:18:33 · 9278 阅读 · 0 评论 -
Linux文件锁flock,检查程序是否已经运行
在多个进程同时操作同一份文件的过程中,很容易导致文件中的数据混乱,需要锁操作来保证数据的完整性,这里介绍的针对文件的锁,称之为“文件锁”-flock。flock,建议性锁,不具备强制性。一个进程使用flock将文件锁住,另一个进程可以直接操作正在被锁的文件,修改文件中的数据,原因在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另一个进程写入数据的情况,内核不会阻止这个进程原创 2014-11-05 09:45:15 · 2713 阅读 · 0 评论 -
关于printf格式的说明
"格式描述串"是由一系列的"格式转换说明符号"组成,格式转换说明符号的描述形式如下: % [+][-] 0 m[.n] [输出精度] (1)形式字母:制定输出格式,如表d:十进制整型数i:十进制整型数x:十六进制整型数o:八进制整型数u:无符号十进制整型数c:单个字符;s:字符串e:指数形式的浮点数f:小数形式的浮点数g:e和f中比较短的一种p原创 2014-12-15 15:30:56 · 904 阅读 · 0 评论 -
"parse error before *"
由于要在redhat 7.2上进行测试,ubuntu上编译好小程序后,调试没有问题。但是在rh7.2上编译报错。而且莫名其妙的错误,以前没有遇到过。百度以后,找到答案。 说明编译器只支持 C89 标准。这个 C 标准要求在一个块内的变量的声明要放在所有非声明语句的前面。 平时编译时以为只有for(int i=0;;)这样的在循环内定义变量不可行。忘记了C原创 2014-12-05 15:30:25 · 7463 阅读 · 0 评论 -
windows驱动开发相关知识
http://www.cnblogs.com/xing901022/archive/2012/10/18/2730024.html[作者] 猪头三 个人网站 :http://www.x86asm.com/ [序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动原创 2015-12-02 22:10:49 · 709 阅读 · 0 评论 -
libxml2 xpath namespace
使用libxml2的xpath进行节点查询时。在测试中十分正常。后来在应用中发现总是无法找到结果。返回结果数为空。对比测试文件与系统生成xml文件发现关于xmlns属性变化引起异常。当使用无prefix命名空间时,会引起此异常xmlns="http://www..com.cn/xxx.xsd"百度N个网页后找到替代方案"//*[local-name()='UserTag'][@name原创 2015-09-24 17:37:36 · 1566 阅读 · 0 评论 -
Linux下的PCI设备驱动自动加载问题MODULE_DEVICE_TABLE
以前做驱动时,一般将驱动复制到/lib/modules/$(uname -r)/kernel/driver/目录后,运行depmod都可以自动加载,但是客户反映公司一款驱动无法自动加载。后经过与其它版本代码对比,才发现是MODULE_DEVICE_TABLE没有设置引起的异常。在Linux IIC驱动中看到一段代码:static struct platform_device_i原创 2015-11-13 11:17:55 · 3735 阅读 · 0 评论 -
为什么GRUB起始地址为0x7c00.
为什么GRUB起始地址为0x7c00.http://www.glamenv-septzen.net/en/view/6原创 2015-10-13 10:25:05 · 689 阅读 · 0 评论 -
configure: error: GRUB requires a working absolute objcopy; upgrade your binutils 解决方法
编译grub-0.97时,执行configure后,出现如下错误: configure: error: GRUB requires a working absolute objcopy; upgrade your binutils 错误提示upgrade your binutils,但是系统安装是最新版本的binutils。其实,这个原因主要是由于gcc的版本原创 2015-10-09 16:32:45 · 1325 阅读 · 0 评论 -
linux kernel docs
kernel.org官方文档查询地址https://www.kernel.org/doc/htmldocs/原创 2015-10-08 15:37:56 · 686 阅读 · 0 评论 -
borland c 3.1 dos编程必备工具
公司一同事要给硬件新人做培训,其中要讲到在DOS下如何编程,来调试自己的IO卡。想想前一段时间自己搞过DOS下编程,于是将以前的工具整理一下。交给同事培训使用。本工具已经精简到只有bin,include,lib库三个文件,然后我又添加了一个example用来展示如何使用makefile来编译程序。当然,使用本程序前,也就是第一次使用需要先运行installevn.bat文件将环境变量添加到系统变量原创 2015-09-13 08:27:41 · 3472 阅读 · 0 评论 -
U盘制作DOS启动盘MSDOS 7.10
同事要在DOS下编程.印象中记得有一版本的DOS已经支持目录补全和命令补全了。经过查询之后发现MSDOS 7.10可以支持此功能。故在网上下载完整安装包后。提取了其中的文件。结合HP的U盘制作工具,可以很好地制作出一款功能齐全的DOS。在此工具选择制作启动盘,然后选定DOS文件目录就行,如果选择DOS710.制作完成后要把DOS710中文件再复制到U盘中,因为此工具只复制了最基本的三个程序,其原创 2015-09-15 15:44:16 · 16195 阅读 · 0 评论 -
WIN7 64位 x64虚拟网卡驱动
先前修改过一版XP下虚拟网卡。最近同事要在64位win7下使用虚拟网卡,原来的32位网卡已经不能使用。故修改此64位网卡驱动,以便解除微软网卡只能修改为02开头网卡MAC地址限制。32位虚拟网卡驱动http://download.csdn.net/detail/blaider/585619364位虚拟网卡驱动http://download.csdn.net/deta原创 2015-09-11 14:08:57 · 6295 阅读 · 1 评论 -
libc.so.6: version `GLIBC_2.14' not found
【linux】提示"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低0.以下在系统CentOS 6.3 x86_64上操作1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:2.查看系原创 2014-12-24 18:21:05 · 3541 阅读 · 0 评论 -
vc程序以管理员权限运行方法
由于刚刚做的小程序需要使用管理员权限运行,方法一:1找到VS2010的快捷方式:右击——“打开文件位置”找到VS2010的启动项目devenv.exe:右击——属性——兼容性——特权等级,以管理员权限运行;如果需要每个用户都以管理员权限运行,还可以“更改所有用户的设置”——特权等级,以管理员权限运行。然后在项目的打开方式中确保以VS2010为默认打开程序就好了。2 属性--连接原创 2014-07-04 11:48:21 · 9699 阅读 · 0 评论 -
warning:deprecated conversion from string constant to 'char *'解决方案
Linux 环境下当GCC版本比较高时,编译代码可能出现的问题问题是这样产生的,先看这个函数原型:void someFunc(char *someStr);再看这个函数调用:someFunc("I'm a string!");把这两个东西组合起来,用最新的g++编译一下就会得到标题中的警告。为什么呢?原来char *背后的含义是:给我个字符串,我要修改它。而理论上,我们原创 2014-06-11 18:30:46 · 889 阅读 · 0 评论 -
自己创建 minidump (自认为精品) (转)
(转)以前曾写过一个 bugslayer.dll 的介绍. 在程序出错时将调用栈写到文件. 觉得不错. 后来开始用 windbg. 知道了 userdump. 知道了如何调试 dump... 才知道程序崩溃的时候写 dump 文件其实可以获取比调用栈多得多的信息. 如果你的程序什么都不干. 那么在程序出错的时候. drwtsn32.exe 会写一个 userdump. 但 dr原创 2014-07-01 08:57:58 · 986 阅读 · 0 评论 -
不定长参数函数的实现
源码如下:int sum(int num, ...){int *p = &num + 1;int ret = 0;while(num--){ printf("%d\n", num); ret += *p++;}return ret;}int main(int argc, char* argv[]){printf("%d\n", sum转载 2012-05-17 22:53:26 · 5900 阅读 · 2 评论 -
Debug头文件
/* ****************** Common header file ****************** *//* Before include this file, you may define MYDEBUG */#ifndef _MYHEAD_H_#define _MYHEAD_H_/*ANSI headers */#include asser转载 2012-05-17 22:28:51 · 1926 阅读 · 0 评论 -
gdb 条件断点
gdb 条件断点 1.有时候,我们需要断点在循环的某个条件处时,比如以下代码:#include int main(int argc,char *argv[]){ int i=0; for ( ; i { int m; m = i; } return 0;}2.开始编译#cc -g main.c将生成转载 2012-05-17 21:46:07 · 6362 阅读 · 0 评论 -
c/c++标准预定义宏
C标准中的一些预定义宏昨天写代码时需要在代码获取当前编译时间,从而可动态地作为版本信息,因此用到了C标准中的一些预定义的宏。在此将C标准中定义的几个宏一并总结一下:__DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字,如May 27 2006) __FILE__ 代表当前源代码文件名的字符串文字 ,包含了详细路径,如G:/program/study/c+/转载 2012-05-17 22:49:29 · 9227 阅读 · 0 评论 -
Standard Predefined Macros
3.7.1 Standard Predefined Macros The standard predefined macros are specified by the C and/or C++ language standards, so they are available with all compilers that implement those standards. Older c转载 2012-05-17 22:31:04 · 756 阅读 · 0 评论 -
C语言不定参数
转自: http://blog.chinaunix.net/space.php?uid=22566367&do=blog&id=382046最近,遇到一个c语言的不定参数问题。其实,对于c语言的不定参数问题,只需要三个函数就可以搞定了。这三个函数的头文件是,其实下面的三个函数都是一个宏定义(macro)。 这三个函数是: void va_start(va_list ap转载 2012-05-17 22:57:05 · 9764 阅读 · 0 评论 -
定时器和复选框冲突?
在系统中添加了定时器,在给复选框添加完变量后,发现复选框无法正常使用,在页面上改变复选框的值,它总是恢复找默认值,在网上搜索了一下,发现也没有类似的答案。于是就仔细分析自己的代码,感觉一定是自己的代码有问题。经过分析后,觉得是updatedata使用上出了问题。由于好久不用VC。对于updatedata()这个函数还是有点陌生。在定时器中自己首先调用updatedate(false)。本意是想让控原创 2012-05-07 23:32:34 · 788 阅读 · 0 评论 -
closehandle可不能随便用
今天在项目里涉及多线程时。本来是想用TerminateThread来结束一个线程,可惜由于线程里用到了Socket。如果用这种方式强制结束线程,会使得部分Socket没有释放,故重新启动线程后,部分网络端口无法使用。最后想到了使用Event事件来结束线程的方式。于是设置一个Event事件。在While循环里先判断是否已经激发了退出事件,如果激发,就关闭Socket并退出。在根据书上的代码,在激活事原创 2012-05-07 23:26:28 · 6221 阅读 · 2 评论 -
cout输出16进制
#include "stdafx.h"#include "stdlib.h"#include "iostream"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){unsigned int i = 0;int temp = (int)i -1;--i;cout //转载 2012-05-02 21:54:29 · 3547 阅读 · 0 评论 -
VC中的UpdateData()
UpdateData(TRUE) -- 刷新控件的值到对应的变量 UpdateData(FALSE) -- 拷贝变量值到控件显示 所以在程序代码中,要取得控件变量数据,先要执行UpdateData(TRUE),获取最新的数值,在程序代码结束时,运行UpdateData原创 2011-08-14 17:36:15 · 844 阅读 · 0 评论 -
Linux下的PIPE
#include #include #include int main(void){ int n; int fd[2]; pid_t pid; char line[3000]; if(pipe(fd)<0)//pipe printf("pipe error"); if((pid=fork())<0)//fork {printf("fork原创 2012-06-10 18:44:23 · 864 阅读 · 0 评论 -
Linux下的IPC-命名管道的使用
一、概述进程之间通过管道来进行通讯是一种常用的方法,顾名思义,管道就是一端进(写)一端出(读)的FIFO队列,这个队列由内核管理,有一定大小(一般是4k),有文章上提到,如果需要修改该缓存区,需要重新编译内核(修改linux/limits.h里PIPE_BUF的定义)。需要明确的是,虽然管道在理论上是双向的,但实际应用时,为避免复杂,都单向来用,需要双向通讯时,采用两个管道进行。具有亲原创 2012-06-10 18:53:46 · 896 阅读 · 0 评论 -
Linux IPC总结
IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。System V,BSD,POSIX System V是Unix操作系统最早的商业发原创 2012-06-10 19:00:35 · 608 阅读 · 0 评论