C语言
文章平均质量分 74
gqtcgq
这个作者很懒,什么都没留下…
展开
-
tinyhttpd简介
一:简介: tinyhttpd是由J. DavidBlackstone在1999年编写的,实现了一个很简单的web服务器。支持GET和POST方法,总代码量也就在500行左右,可以用来学习HTTP协议和UNIX系统调用。 http://tinyhttpd.sourceforge.net/ 二:流程: 首先绑定套接字到本地地址,套接字的端原创 2015-08-08 18:02:15 · 2835 阅读 · 0 评论 -
《C程序设计语言》笔记(二)
四:函数与程序结构 1:函数之间的通信可以通过参数、函数返回值以及外部变量进行。 2:如果函数定义中省略了返回值类型,则默认为int类型。如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,比如sum += atof(line);那么atof这个函数的返回值将被假定为int类型,但上下文不对其参数做任何假设。 如果函数声明中不包含参数,比如d原创 2014-10-26 21:13:55 · 826 阅读 · 0 评论 -
《C程序设计语言》笔记(一)
一:导言 1:printf中的格式化字符串:%ld 按照long整型打印%6d 按照十进制整数打印,至少6个字符宽,不够的话空格补齐%6f 浮点数打印,至少6个字符宽%.2f 浮点数打印,精确到小数点2位%6.2f原创 2014-10-26 21:09:05 · 1730 阅读 · 0 评论 -
《C程序设计语言》笔记(三)
六:结构 1:结构体声明中,比如:struct point{int x;int y;}; struct后面的名字是可选的,称为结构标记。结构成员、结构标记和普通变量可以采用相同的名字,它们之间不会冲突,因为通过上下文分析,总可以对他们进行区分。 2:结构体的初始化,可以在定义的后面使用初值表进行。初值表中同每个成员对应的原创 2014-11-14 09:36:57 · 592 阅读 · 0 评论 -
进程保活方法
mysql-proxy源码中,使用了一种进程保活的方法。这种方法的基本原理是:当父进程完成基本的初始化后,创建子进程,由子进程继续后面的主体逻辑。而父进程wait子进程的退出状态。一旦发现子进程是由于收到信号而退出的,则重启子进程。 这种方法的实现代码如下:#include #include #include #include #include #include #原创 2016-07-23 08:20:25 · 1791 阅读 · 0 评论 -
C函数和宏中的可变参数
一:调用惯例 函数的调用方和被调用方对函数如何调用应该有统一的理解,否则函数就无法正确调用。比如foo(int n, int m),调用方如果认为压栈顺序是m,n,而foo认为压栈顺序是n, m,那么这个函数就不会调用成功。 因此,函数的调用方和被调用方对于函数如何调用需要有个明确的约定,双方都遵守同样的约定,函数才能调用成功,这种约定称为调用惯例,一原创 2015-12-20 10:03:00 · 826 阅读 · 0 评论 -
是readdir,还是readdir_r
readdir的原型如下:struct dirent *readdir(DIR *dirp); 因为内部使用了静态数据,所以readdir被认为不是线程安全的函数,POSIX[i]标准这样描述: The application shall not modify the structure to which the return value of read原创 2015-12-19 18:01:30 · 8132 阅读 · 0 评论 -
柔性数组成员
如果需要在结构体中存放一个动态长度的字符串,一般的做法,是在结构体中定义一个指针成员,该指针指向该字符串所在的动态内存空间,例如:typedef struct test{ int a; double b; char *p;}; 使p指向字符串,但这种方法造成字符串与结构体是分离的,不利于操作。可以把字符串跟结构体直接连在一起:char a[] = "hello wor原创 2015-12-16 22:45:17 · 1178 阅读 · 0 评论 -
Error While Loading Shared Libraries, Cannot Open Shared Object File
In the “I wish the Internet had anactual correct answer” category comes a question from a Windows colleaguetrying to build software on Linux. He asks “I’m trying to do some web performancetesting and转载 2015-11-12 22:20:11 · 1229 阅读 · 0 评论 -
getopt、getopt_long和getopt_long_only解析命令行参数
一:posix约定: 下面是POSIX标准中关于程序名、参数的约定: 程序名不宜少于2个字符且不多于9个字符; 程序名应只包含小写字母和阿拉伯数字; 选项名应该是单字符或单数字,且以短横 ‘-’ 为前綴; 多个不需要选项参数的选项,可以合并。(譬如:foo -a -b -c ----> fo原创 2015-07-30 21:44:03 · 1755 阅读 · 0 评论 -
内存分配与处理函数
一:内存分配与释放 1:man手册#include void *calloc(size_t nmemb, size_t size);void *malloc(size_t size);void free(void *ptr);void *realloc(void *ptr, size_t size); malloc申请size个字节的空间,并返回内原创 2015-08-30 11:33:23 · 1033 阅读 · 0 评论 -
gcc需找头文件路径
`gcc -print-prog-name=cc1plus` -vThis command asks gcc which C++ preprocessor it is using, and then asks that preprocessor where it looks for includes.You will get a reliable answer for your s转载 2015-06-01 17:29:21 · 679 阅读 · 0 评论 -
LInux下编译发生的libc相关错误
在某主机上编译程序,发生有找不到libc的问题,自己写了个简单的hello world程序,编译也失败,报错如下:# gcc -o 1 1.c/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../libc.so when searching for -lc/usr/bin原创 2015-07-06 17:23:29 · 7864 阅读 · 0 评论 -
通过GDB重新获得进程的输出
有时通过SecureCRT或者Putty远程ssh到主机上执行某个进程,因长时间没有交互导致ssh断链,此时该进程由init进程收留。该进程的输出也就无法获得了。 这种情况下,可以利用gdb重新获得该进程的标准输出,方法如下: 1:获得程序的进程号(PID),以某个python进程为例:# ps –ef|grep python……root 2原创 2015-08-31 21:39:08 · 1404 阅读 · 0 评论 -
字符串处理函数
一:查找1:strcspn函数 该函数是标准库的函数,包含在头文件中,其原型如下:size_t strcspn(const char *s1, const char *s2); 该函数计算字符串s1中,从头开始的某子串的长度,该子串中的字符都不会在s2中出现。举例如下:int main(int argc, char **argv){原创 2015-09-12 21:57:29 · 565 阅读 · 0 评论 -
预处理:头文件、宏定义、条件编译
一:预处理过程 预处理器将进行宏替换、条件编译和包含指定的文件。以“#”开头的命令行就是预处理器处理的对象。这些命令行可以出现在任何地方,其作用可延续到所在翻译单元的末尾。每一行都会单独进行分析。预处理过程,在逻辑上可划分为下面几个连续的阶段: 1:进行三字符序列替换 三字符组(trigraph)与双字符组(Digraph)是3个或者2个字原创 2015-08-30 21:13:10 · 4282 阅读 · 0 评论 -
WebBench简介
一:简介: Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码加起来不到600行。 http://home.tiscali.cz/~cz210552/webbench.html原创 2015-08-01 12:28:03 · 907 阅读 · 0 评论 -
利用backtrace和ucontex定位segment错误
C程序运行时,经常会碰到”segmentfault”错误。这是由于程序中非法访问内存导致的。当操作系统的内存保护机制发现进程访问了非法内存的时候会向此进程发送一个SIGSEGV信号,导致进程直接退出,并在shell中提示segment fault。 因此,可以通过设置SIGSEGV信号处理函数,在处理函数中调用backtrace系列函数得到异常时的函数调用栈信息。原创 2016-12-26 09:28:09 · 1956 阅读 · 0 评论