C/C++
文章平均质量分 61
zz_d
这个作者很懒,什么都没留下…
展开
-
NULL和空字符串的布尔值
<br />偶然碰到<br /> char *str="";<br /> if(str)<br /> printf("str/n");<br /> if(!str)<br /> printf("!str/n");<br /> 输出 str , 对结果感到疑惑<br /> <br />使用下列代码进行测试<br /> <br />int main()<br /> 58 {<br /> 59 char *str="";<br /> 60原创 2011-05-22 15:23:00 · 5748 阅读 · 0 评论 -
c 中使用 ftruncate() 前需要 fflush(), 使用后需要 rewind()
今天用 ftruncate 截断文件, 但怎么都不能达到预料的效果, 截断后文件中的内容比较杂, 而且文件大小也保持原来的.添加 fflush() 和 rewind() 后OK.以下是测试代码:#include #include #include int main(){ FILE *fp; char *file = "tmp"; int i; int fd;原创 2012-09-10 11:35:35 · 6494 阅读 · 1 评论 -
fgets 一比较长的行
从文件中用fgets读取一行内容时, 如何设定缓冲区的大小, 是一个值得考虑的问题. 以下是我读eash源码中看到的一个函数, 在需要一次读入一整行很长的内容时可以参考下.static char *local_getline(char *zPrompt, FILE *in){ char *zLine; int nLine; int n; int eol; if( zPrompt &原创 2012-09-14 15:24:17 · 3077 阅读 · 0 评论 -
inotify 中, 在 read 其 struct inotify_event 时, 缓冲区必须大于读取的结构体的大小
linux中监控文件的 inotify 提供了以下几个编程函数, inotify_init(), inotify_add_watch(), inotify_rm_watch(). 从 inotify_init() 返回的文件描述符 read, 读取监听到的事件. 事件的结构为: struct inotify_event { int wd;原创 2012-09-14 16:07:50 · 5409 阅读 · 0 评论 -
c 获取文件 MD5 值
网上有 md5.c , md5.h, 但是里面只有 MD5Init(), MD5Update(), MD5Final() 三个函数, 只可以直接对字符进行操作, 而没有直接求文件md5的接口. 以下是我的实现, 可计算32位和16位的md5值./***********************************************************************原创 2012-09-15 22:42:19 · 10780 阅读 · 1 评论 -
C 去除 字符串两边的空字符
今天在一国外网站上, 看到下面的代码, 觉得挺精简. char *tr ( char *s ){ int i = 0; int j = strlen ( s ) - 1; int k = 0; while ( isspace ( s[i] ) && s[i] != '\0' ) i++; while ( isspace ( s[j] ) && j >= 0原创 2012-10-23 17:47:59 · 1409 阅读 · 0 评论 -
C往 SQLITE 中插入字符串时 ' 和 " 的转义
C 中经常需要这样生成 sql 语句:sprintf(sql, "INSERT INTO data(cmd) VALUES(\"%s\");", cmd);当 cmd 为 echo "ab 时, C 中 cmd 为 "echo \"ab"sql 为 "INSERT INTO data(cmd) VALUES(\"echo \"ab\");"会在 ab 前面发生截断.原创 2012-10-23 18:11:12 · 4954 阅读 · 0 评论 -
c 中 stdout, stderr 容易忽视的一些细节
先看下面一个例子a.c :int main(int argc, char *argv[]){ fprintf(stdout, "normal\n"); fprintf(stderr, "bad\n"); return 0;}$ ./anormalbad$ ./a > tmp 2>&1$ cat tmpbadtmp我们看到, 重定向到一个文件原创 2012-11-02 15:54:10 · 933 阅读 · 0 评论 -
简单端口扫描器:批量IP, 特定端口
同事需要一个 win 平台, 功能比较单一的端口扫描器, ip 地址从一个文件中导入, 每次运行指定一个端口. 以下是实现./***************************************************************************** * Copyright : All Rights Reserved. * * D原创 2012-11-21 16:31:51 · 5436 阅读 · 0 评论 -
select, semop 等阻塞的系统调用返回值的检查
最近工作实现一个 7 * 24 小时的服务程序, 经常出现 "semop: Interrupted system call", "select failed: Interrupted system call". 经查是因为在 select, semop 的返回值为 -1 时没有对 errno 进行检查.如果 "errno == EINTR", 则应该 continue.这篇文章说得很原创 2012-12-28 16:16:27 · 1783 阅读 · 0 评论 -
列数不同数组的一种遍历
今天同事碰到个问题, 我因为生疏, 也耗了些时间才搞定.下面类型的一种数组list =[ ["a", "b"], ["1"] ["dd", "ee"]]需要得到的遍历组合结果为 "a1dd", "a1ee", "b1dd", "b1ee"直接用循环似乎并不方便实现.以下是递归的一种实现方法.len = num_of_member( list )fun( li原创 2012-12-19 17:46:42 · 426 阅读 · 0 评论 -
C 实现 HUP 信号重启进程
/***************************************************************************** * Copyright : All Rights Reserved. * * Date : 2013-01-11 17:02:10 * Author/Corporation :原创 2013-01-11 16:55:46 · 952 阅读 · 0 评论 -
linux c 查找使用库的 cflags 和 libs
很多时候,使用一些特别的库, 在编译可执行程序时, 需要添加额外的 CFLAGS 和 LIBS . 否则会提示找不到指定的头文件或者"undefined reference to ..." 的错误信息.假如程序 test.c 中使用了 libxml 的 api, 直接$ gcc -Wall -o test test.c会提示错误消息. 执行$ ls /usr/lib/pkgconfi原创 2013-03-05 15:37:54 · 1604 阅读 · 0 评论 -
C中不安全的 sprintf 和 strcpy
经过跟踪调试, 发下不少 bug 源于 sprintf 和 strcpy 之类可能造缓冲区溢出的函数. 应该将所有的 sprintf 用 snprintf 替换. 将 strcpy 用 strncpy 替换, 并且将末尾字节设置为 ''\0' .strncpy(buf, str, len);buf[len] = 0;原创 2013-02-27 09:47:39 · 1296 阅读 · 0 评论 -
C 使用 Inotify 监控目录和文件
1. 监控路径并打印所有发生在该路径的事件. 代码如下:/***************************************************************************** * Copyright : All Rights Reserved. * * Date : 2013-03-01原创 2013-03-01 13:26:35 · 9452 阅读 · 0 评论 -
测试 inotify 中 IN_DELETE_SELF
// 这篇文章对 IN_DELETE_SELF的理解出错.前段时间写 inotify 相关的程序, 发现当时间为 IN_DELETE_SELF或 IN_MOVE_SELF 时 event 结构中 name 属性不能 printf.我觉得不应该, 今天特意写代码测试下.#include #include #include #include #define BUF_LEN 1原创 2012-09-05 21:56:03 · 3224 阅读 · 0 评论 -
Linux C 获取进程的退出值
如以下代码所示:/***************************************************************************** * Copyright : All Rights Reserved. * * Date : 2013-03-14 15:11:48 * Author/Corpor原创 2013-03-14 15:13:19 · 1585 阅读 · 0 评论 -
c 根据 可变参数合成字符串
写代码时, 经常需要根据参数值得到一特定的字符串. 每次都调用vsprintf, malloc很烦. 以下是一个实现了此功能的接口./***************************************************************************** * Copyright : All Rights Reserved. *原创 2012-09-05 23:45:29 · 2122 阅读 · 0 评论 -
read 不会设置缓冲区最后一个字节为 '\0'
有时候会对 read 和 fscanf 等读入内容到缓冲区, 在输入内容大于缓冲区时, 是否会自动将最后一个字节设置为 '\0' 犹豫. 在这里测试下.#include #define LEN 3int main(int argc, char *argv[]){ char buf[LEN]; char buf2[LEN] = {'\0'}; read(0, buf,原创 2012-09-05 21:06:23 · 2651 阅读 · 1 评论 -
C 转移表/转换表
个人实现例子: #include #include #define M 4int add(int a, int b);int sub(int a, int b);int mul(int a, int b);int div(int a, int b);int (*oper_func[])(int, int) = { add, sub, mul, div};原创 2011-06-08 14:55:00 · 1162 阅读 · 0 评论 -
用字符串数组显示菜单
以前写菜单方面东西时往往重复, 发现这个方法还可以, 用一个指针的指针解决遍历问题. #include static char *menu[] = { "1 --- push one item./n", "2 --- pop one item./n", "3 --- quit./n", NULL};void Show_menu();int main(原创 2011-06-17 18:33:00 · 519 阅读 · 0 评论 -
c 的 for 循环中改变变量的值
不知道何时起, 非常刻意避免在 for 循环体内改变变量值. 似乎是受别人观点影响, 但却并不知晓原因. 可是有时候用其他方法替代却不方便, 自己试了一下, 或许找到了一丝差异. 用这种方法赋值时, 没有出现问题:#include int main(){ int i; for(i=0; i<10; i++) { i = i+2; printf("原创 2011-06-18 19:00:00 · 1677 阅读 · 0 评论 -
C中数值与真假
#include int main(){ int pos = 2; int neg = -2; int mid = 0; if(pos) printf("pos./n"); if(neg) printf("neg./n");原创 2011-06-29 12:36:00 · 603 阅读 · 0 评论 -
C中含有 if 的宏定义
含有if的宏定义当宏定义中含有 if 时 1) 定义如下宏 #define DC(p) if( foo(p) )fun(p) 用在下面的环境中 if(k>n) DC(k); else DC(n); 宏替换后,如下 if(k>n) if( foo(原创 2011-07-21 12:50:43 · 6858 阅读 · 0 评论 -
一个简单web server 的实现
昨天在 Source Forge 中下了 Ani-server 的源码, 代码不过几百行, 已经有一个基本 web server 的功能.参照其思路, 自己实现了下, 有点意思.基本思路:1)取得一 socket 的 fd --> bind --> listen -->sele原创 2011-07-21 21:55:14 · 1799 阅读 · 0 评论 -
用C生成简单格式的xml
代码很简单,直接贴了。#include //author: dengzhaoqun//date: 2012/03/05static FILE *out = NULL;static int tabs = 0;void set_out_fp(FILE *fp){ out = fp;}void put(char *str){ fprintf(out, "%s",原创 2012-03-05 17:54:40 · 2254 阅读 · 0 评论 -
c 调用 python 异常的可能原因
PyImport_ImportModule 失败可能的原因:没有形成module。解决方法:按python规定,新建一个 module_name 的文件夹, 里面有一个 __init__.py 和 module_name.py 文件PyObject_GetAttrString(pModule,"pFunc") 失败的可能原因:pModule.py 文件本身有错误解决方法:原创 2012-03-08 18:13:24 · 2590 阅读 · 0 评论 -
Notepad++ 中 C 代码技巧
格式化代码1, 安装TextFX 插件,.从 "Plugin Manager" 中安装即可.2, 选择 "TextFX" -->"TextFX Edit"-->"Reindent C++ Code" 即可.自动提示函数参数"设置" --> "首选项" --> "备份与自动完成" , 勾选"简单备份"与"输入时提示函数参数", OK原创 2012-03-30 19:11:20 · 1914 阅读 · 0 评论 -
输出所有 wmic 的 list full, 用关键字搜索结果
这段时间,因为要在 win 上查询系统不少相关信息,用到 wmic 。但是有时候要查找一条信息,我并不清楚要去 wmic 的哪一个别名查找, 但根据相关别名使用 list full, 再去查找信息则太麻烦。因此,我想到,可以先把每一条别名都 list full, 把输出重定向到相应文本文件中然后,就可以通过关键字在输出的所有文本文件中搜索 -- 文本文件中包含了 别名所有的字段和输原创 2012-03-20 20:02:06 · 2955 阅读 · 0 评论 -
C 添加, 读取配置文件 函数
发现读取配置文件, 还是用得比较多的. 网上搜了下, 有不少的代码范例了.不过一般实现的函数需要传递的参数都有配置文件的路径.个人认为在某些情况下参数传入 流 重用性更大一点.本想基于流的参数将 读取, 添加, 删除, 修改 配置文件的函数全部实现. 但发现删除 , 修改 需要重新打开流, 单纯传入一个流参数不能方便实现.以下是读取, 添加 配置的函数实现."ope原创 2011-07-24 16:19:57 · 2077 阅读 · 0 评论 -
wmic 中 获取系统内存使用
尝试了多种方法, 取得的系统的内存使用量总是和 windows 任务管理器 底部显示的 内存使用有较大差距.用以下方法可以很接近任务管理器中的值.由 wmic OS 中取得 FreeSpaceInPagingFiles, SizeStoredInPagingFiles已用内存即为 SizeStoredInPagingFiles - FreeSpaceInPagingFiles以下为原创 2012-04-11 20:01:33 · 5342 阅读 · 0 评论 -
C 用 access 函数获取盘符列表
#include #include int main(){ int ret; int i; char path[10]; char drive; drive = 'c'; for(i=0; i<24; i++) { sprintf(path, "%c:", drive); ret = access(path, 0); if(ret == 0) {原创 2012-04-17 18:03:03 · 807 阅读 · 0 评论 -
linux c 获取本机所有IP
经常需要获取本机的ip地址, 通常的 gethostname和gethostbyname 经常只返回 "127.0.0.1", 这里提供一个返回 "ip1, ip2, ..." 格式的接口.#include #include #include #include #include #include #include #include #include char *ge原创 2012-08-20 13:28:40 · 5332 阅读 · 0 评论 -
打印函数的轨迹
最近负责完成一个不算小的服务器程序, 虽然已经加了不少的异常判断以及printf, 但程序有时候还是会莫名其妙地挂掉, 跟踪调试多了, 实在让人害怕.因此使用一个简单的宏来跟踪函数调用.#define trace_fun() if(TRACE_FUN) fprintf(stderr, "-- %s\n", __FUNCTION__)当然, 这样或许更好些 #define tra原创 2012-08-29 15:59:36 · 761 阅读 · 0 评论 -
测试是否可以 waitpid 子进程的子进程
虽然 " man waitpid" 里写明作用的对象是子进程, 我还是测试下是否可以 waitpid 子进程的子进程.以下为测试代码, 其中用一块 sizeof(int) 大小的共享内存传递子进程的子进程 pid.#include #include #include #include #include #include #include int main(int argc,原创 2012-09-01 16:08:31 · 974 阅读 · 0 评论 -
fork 导致的内存泄露
今天找到一个困扰一段时间的内存泄露问题的原因.调用 fork() 后, 拷贝了原进程的内存, 却并没有继承原进程释放内存的线程.原创 2013-03-25 17:00:54 · 1226 阅读 · 0 评论