c基础
沈万三gz
浮躁一分,到处遍招尤悔因循二字,从来误尽英雄。
展开
-
uthash
在软件开发中,不可不免的会使用到hash表,hash表的优点这里就不说了,以下介绍一个hash表的C实现,uthash是用宏实现的,使用的时候非常方便,只用包含uthash.h即可。Uthash的三个数据结构:1. typedef struct UT_hash_bucket { struct UT_hash_handle *hh_head; unsigned cou转载 2015-09-25 10:46:24 · 3495 阅读 · 0 评论 -
offsetof
定义在stddef.h头文件中,该宏的完整说明如下:#ifdef __cplusplus#ifdef _WIN64#define offsetof(s,m) (size_t)( (ptrdiff_t)&reinterpret_cast((((s *)0)->m)) )#else#define offsetof(s,m) (size_t)&reinterpret_cast((转载 2015-09-25 11:19:11 · 386 阅读 · 0 评论 -
C语言中关于时间的函数
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元) 1.概念 在C/C转载 2015-09-25 11:52:31 · 629 阅读 · 0 评论 -
Linux下动态共享库加载时的搜索路径详解
/etc/profile----设置全局环境变量/root/.procfile-----设置本地环境变量(作用域当前用户)-----------------------------------------------------------------我是分割线-----------------------------------------------------------转载 2015-10-16 11:21:08 · 527 阅读 · 0 评论 -
extern "c"用法解析
引言C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译转载 2015-10-31 16:00:30 · 493 阅读 · 0 评论 -
C语言的谜题
1、下面的程序并不见得会输出 hello-std-out,你知道为什么吗?123456789101112#include #include intmain() { while(1) { fprintf(stdout,"hello-std-out");转载 2015-10-31 16:39:51 · 502 阅读 · 0 评论 -
const关键字修饰变量
char * const cp : 定义一个指向字符的指针常数,即const指针const char* p : 定义一个指向字符常数的指针char const* p : 等同于const char* p const char **是一个指向指针的指针,那个指针又指向一个字符串常量。 const char*指向的内存空间转载 2015-10-31 16:22:34 · 613 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2015-10-31 16:20:59 · 478 阅读 · 0 评论 -
Linux 线程锁详解
在Posix Thread中定义有一套专门用于线程同步的mutex函数。 1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_m转载 2015-11-30 11:31:56 · 639 阅读 · 0 评论 -
gcc内置原子操作函数
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。注意:这是gcc编译器自带的原子函数,不能跨平台交叉编译。gcc还有这一组内置函数. ?123456789101112131415//先做操作,再返回变化后的值type __sy转载 2015-09-25 11:16:32 · 1473 阅读 · 0 评论 -
FTP协议过程分析
FTP连接过程分析建立TCP连接 客户呼叫服务器21端口,客户端自已选一个端口如:3963 三次握手建立TCP连接服务器发回FTP欢迎信息 220 Welcome to HUST SOUTH 1 Bulding Kaka FTP service.客户端登录 端口:3963--21 客户--服务器 首先客户端发送用户名, 55 53-45 52 20 31转载 2015-10-24 11:40:24 · 993 阅读 · 0 评论 -
有关(int&)和(int)的区别
先看一段程序?123456789101112131415161718192021222324252627#include "stda转载 2015-10-24 11:39:19 · 554 阅读 · 0 评论 -
glib学习--hash table02
hash表是一种提供key-value访问的数据结构,通过指定的key值可以快速的访问到与它相关联的value值。hash表的一种典型用法就是字典,通过单词的首字母能够快速的找到单词。关于hash表的详细介绍请查阅数据结构的相关书籍,我这里只介绍glib库中hash表的基本用法。要使用一个hash表首先必须创建它,glib库里有两个函数可以用于创建hash表,分别是g_hash_table转载 2015-09-28 20:31:29 · 642 阅读 · 0 评论 -
glib学习--hash table01
我们常见的hash table的实现,基本是bucket list + 链表,何意? 如上图所示,前面是一排桶,对一一个key-value对,通过key使用hash function计算桶号,放入合适的桶中。如果桶中已经有了相同的hash值,这叫冲突。冲突的解决办法是链入链表。lookup的时候,首先根据key计算出桶号,依次遍历桶后面挂在每个ke转载 2015-09-28 20:30:22 · 550 阅读 · 0 评论 -
常用排序算法总结
所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。当待排序记录的关键字都不相同时,排序结果是惟一的,否则排序结果不惟一。在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。要注意的是,排序算法的稳定性是针对所有输入实例而言转载 2015-10-19 15:25:24 · 489 阅读 · 0 评论 -
python,shell,c语言总结
其中PHP用于编写Web逻辑,而Python则主要用于开发内部服务和后台任务。一般情况下,网站架构的开发语言可以用下图所描述: 百度百科上对于Python的介绍是:一种面向对象、直译式程序设计语言,也是一种功能强大而且完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。目前,基于这种语言的相关技术转载 2015-10-19 11:03:21 · 917 阅读 · 0 评论 -
C语言字符检测函数
isalnum相关函数 isalpha, isdigit, islower, isupper头文件 #include 定义函数 int isalnum (int c);函数说明检查参数 c 是否为英文字母或阿拉伯数字, 在标准c 中相当于使用"isalpha(c) || isdigit(c)"做测试.返回值若参数c 为字母或数字, 则返回TRUE, 否则返回NULL(0转载 2015-10-23 10:03:44 · 1396 阅读 · 0 评论 -
linux创建守护进程且进程中只有唯一实例
在编写服务进程的时候,经常有这样一个需求:保证服务进程只有一个实例在运行。为实现这个简单的功能,有下面各种常见的实现方式:1. 通过已知的进程名,来查询是否有同名的进程正在运行。 可以利用proc,也可以读取ps的输出等;由于进程号可能被其他进程覆盖,所以必须确保改pid下的启动服务就是我们要的程序路径找到某进程启动路径的方法是:1.我们可以从ps命令中得到僵死转载 2015-10-08 14:26:36 · 3534 阅读 · 2 评论 -
进程的退出方式
进程的终止方式:有8种方式使进程终止,其中前5种为正常终止,它们是1:从 main 返回2:调用 exit3:调用 _exit 或 _Exit4:最后一个线程从其启动例程返回5:最后一个线程调用pthread_exit异常终止有3种,它们是6:调用 abort7:接到一个信号并终止8:最后一个线程对取消请求做出响应#include void exit转载 2015-10-08 14:52:07 · 563 阅读 · 0 评论 -
linux文件锁学习01
unix下3中对文件加锁的函数: lockf:适用于freeBSD系统 flock:适用于linux系统 fcntl:使用标准POIX ,可移植到任何标准系统上区别:1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁。2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件加锁,它会阻塞或者也可以返回加锁转载 2015-10-08 16:53:50 · 897 阅读 · 0 评论 -
linux下用core和gdb查询出现"段错误"的地方
有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。下面介绍一种方法,可以有效的定位出现"段错误的地方"。当我们的程序崩溃时,内核有可能把该程序转载 2015-11-30 15:27:18 · 726 阅读 · 0 评论