书《Linux C 程序设计大全》吴岳
trb331617
一只老乌龟,慢慢向前走……
展开
-
链表之节点插入、删除节点、遍历打印、遍历释放,static 全局变量
static关键字声明的全局变量只有本文件内的函数可以引用,其它文件(模块)只能通过该模块提供的接口函数来访问这个static全局变量,而不能直接对其进行操作。 对于一个存储类别声明为static的全局变量而言,其生命周期并没哟发生改变,在整个程序执行过程中该变量一直存在。但其作用域反而有所减小,只有本文件的函数可以引用该全局变量。 1 /* 2 * FILE: p6原创 2018-01-07 20:31:42 · 385 阅读 · 0 评论 -
shell实现 ( cp, ls, )
cp命令_fread, fwrite 1 /* 2 * FILE: p673_cp.c 3 * DATE: 20180124 4 * ============== 5 */ 6 7 #include 8 9 #define BUFFSIZE 128 10 11 int main(int argc, char *argv[])原创 2018-01-24 23:13:52 · 942 阅读 · 0 评论 -
strtok切割字符串,
1 /* 2 * FILE: p670_strtok.c 3 * DATE: 20180125 4 * ============== 5 * DESCRIPTION: strtok 切割字符串 6 * 实际上就是将分隔符的字符替换为'\0'并返回首地址 7 */ 8 #include 9 #include // strtok 10 #in原创 2018-01-25 13:47:41 · 185 阅读 · 0 评论 -
宏定义开关和debug printf,宏定义使用异或交换两数
1、宏定义开关和debug printf#define DEBUG_PRINT 1#ifdef DEBUG_PRINT#define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)#else#define DEBUG(format, ...)原创 2018-01-12 10:49:06 · 854 阅读 · 0 评论 -
makefile实例
如果某一行是命令,则必须以一个tab键开头。命令行之间可以插入空行,此间的空行也要以tab键开头?符号$表示使用变量或调用函数1、make工具的退出码 makefile文件执行后有一个退出码:0 表示成功; 1 表示出错; 2 ...2、使用“:=”操作符 使用":="操作符定义变量的值可以避免递归定义的危险。使用其定义变量时,前面的变量不能使用后面的变量,只能使用...原创 2018-01-17 20:54:23 · 415 阅读 · 0 评论 -
将.ini配置文件转换为.xml文件格式
1 /* 2 * FILE: p670_convert.c 3 * DATE: 20180125 4 * ============== 5 * DESCRIPTION: 将.ini配置文件转换为.xml文件 6 * fgets, fputs, DEBUG(format, ...)调试, strtok切割字符串, 7 */ 8 9 #include原创 2018-01-25 19:22:11 · 1592 阅读 · 0 评论 -
gdb
在使用gdb调试器之前,必须在编译程序时加上-g选项。gcc -o build -g test.cgdbfile buildlistrun aaaaaaaaa bbbbbbbbbblist 1break 10runquit1、列出源程序 list不带参数:list带一个参数:list 带两个参数:list ,line1为显示的起始行,line2为结束行。例,“l原创 2018-01-18 11:00:30 · 259 阅读 · 1 评论 -
读取文件,并统计字母数、空格数、数字数
源代码: 1 /* 2 * FILE: p43_count.c 3 * DATE: 20180106 4 * -------------- 5 * DESCRIPTION: 读取文件,并统计字母数、空格数、数字数 6 */ 7 8 #include 9 #include // exit 10 11 #define BUFFSI原创 2018-01-06 16:49:15 · 2830 阅读 · 0 评论 -
取最大值的通用函数(void指针),struct和int数组的最大值
源代码:(文件已合并,2代码+1Makefile) 1 // Linux C程序设计大全 2 3 /* 4 * FILE: p110_call_main.c 5 * DATE: 20180108 6 * -------------- 7 * DESCRIPTION: 分别比较出struct和int指针数组最大值 8 * void通用指针,函数指针原创 2018-01-09 20:31:51 · 1027 阅读 · 0 评论 -
获取文件权限,struct stat, 与运算
1 /* 2 * FILE: p128_permission.c 3 * DATE: 20180109 4 * -------------- 5 * DESCRIPTION: 获取文件权限 6 * struct stat 7 * 此处运行结果为十六进制0x1b4, 8 * 0001 1011 0100 9 * 文件权限三组八进制:主、组、其它 10原创 2018-01-10 09:49:47 · 727 阅读 · 0 评论 -
循环右移, c = c & ~(~0 << (32-n))
1 /* 2 * FILE: p135_circle_shift.c 3 * DATE: 20180110 4 * --------------- 5 * DESCRIPTION: 循环右移 6 * step 1: 将a右端(低位)的n位放到b中的高位; 7 * step 2:将a右移n位,高位补0 8 * step 3:将b和c进行 | 运算 9原创 2018-01-10 14:52:26 · 215 阅读 · 0 评论 -
说明我的机器把char当signed char处理
1 #include 2 3 int main(int argc, char argv[]) 4 { 5 char a = -1; 6 signed char b = -1; 7 unsigned char c = -1; 8 printf("char: %d\nsigned char: %d\nuns原创 2018-01-10 15:16:33 · 165 阅读 · 0 评论 -
进程终止处理函数
#include Int atexit(void (*func)(void));进程终止处理函数不接受任何参数;进程终止处理函数的调用顺序与设置时相反。 1 #include 2 #include 3 #include 4 5 void fun1(void) 6 { 7 fprintf(stdout, "first\n"); 8 } 9原创 2018-01-19 14:33:23 · 955 阅读 · 0 评论 -
Linux C小项目 —— 实现文件传输
编译运行:文档说明:1、整体程序设计服务器程序是一个死循环,处理一次连接之后不退出,而客户端程序只处理一个连接就可以了。2、客户端程序设计客户端程序的主要任务:a、分析用户输入的命令;b、根据命令向服务器端发出请求;c、等待服务器返回请求的结果。cd命令和ls命令处理客户机文件系统中的目录,不需要和服务器进行通信,因此不需要建立连接。原创 2018-02-03 16:01:16 · 11373 阅读 · 2 评论 -
大端小端:测试本机的数据存储形式
小端:数据的低位 保存在 低地址大端: 这种数据存储方法上的差别不是由操作系统造成的,而是由处理器体系结构造成的。 1 #include <stdio.h> 2 3 int main(int argc, char *argv[]) 4 { 5 int a = 0x12345678; 6 char *p = (ch...原创 2018-01-19 14:52:23 · 191 阅读 · 0 评论 -
(C语言)八大排序之:堆排序、快速排序
堆排序( heap sort ) reference:http://mp.weixin.qq.com/s/mY_bVJPWhzZWL5ZdooA6tw 1 /* FILE: heapSort.c 2 * DATE: 20180116 3 * -------------- 4 */ 5 6 #include 7 8 #define swap(a,原创 2018-01-16 23:01:08 · 531 阅读 · 0 评论 -
文件open、流fopen、fdopen
Open打开文件、fopen打开流、fdopen在一个已经打开的文件描述符上打开一个流 fclose函数关闭文件时,该函数会将保存在内存中尚未来得及写回磁盘的文件内容写到磁盘上。如果没有调用fclose函数,就必须等待内存中缓冲区被填满,由系统将其内容写回到磁盘上去。 由于fclose函数在关闭文件时会将缓冲区中的内容写到磁盘上,因此flcose函数实际是进行了一个写文件原创 2018-01-24 21:46:25 · 655 阅读 · 0 评论 -
I/O流与缓冲
1 /* 2 * FILE: p659_stdio.c 3 * DATE: 20180124 4 * ================== 5 * DESCRIPTION: stdin stdout stderr 6 */ 7 8 #include 9 10 int main(void) 11 { 12 /* 标准输入stdin原创 2018-01-24 20:47:51 · 203 阅读 · 0 评论 -
链表之节点插入、查找删除、遍历打印、遍历释放
1 /* FILE: p40_linkOperate_main.c */ 2 3 #include "p140_common.h" 4 5 int main(int argc, char *argv[]) 6 { 7 struct node *p; 8 int i; 9 10 pr原创 2018-01-13 12:13:37 · 205 阅读 · 0 评论 -
(C语言)八大排序之:插入排序、冒泡排序、选择排序
1 /* 2 * FILE: p198_sort.c 3 * DATE: 20180114 4 * -------------- 5 */ 6 7 #include 8 9 /* 从小到大 排序 */ 10 void insert_sort_min(int *array, int length); 11 void bubble_sort(int原创 2018-01-14 10:31:25 · 309 阅读 · 0 评论 -
二分查找
1 /* FILE: p198_binarySearch.c 2 * DATE: 20170114 3 * -------------- 4 */ 5 6 #include 7 8 int binarySearch(int *array, int value, int length) 9 { 10 int left = 0; 11原创 2018-01-14 13:58:21 · 184 阅读 · 0 评论 -
GCC静态库、动态库
1、静态库 Linux环境下的静态库的扩展名为 .a step 1: 编译源文件,生成可重定位目标文件 " gcc -c static_lib.c" step 2: 使用ar工具创建一个静态库,或者将目标文件加入到一个已经存在的静态库中。格式:ar rcs 静态库名 目标文件2 目标文件2 ... 目标文件n原创 2018-01-14 15:10:04 · 315 阅读 · 0 评论 -
GCC工具链
gcc的整套编译开发工具链包括以下工具:[-A-] binutils:一组用于编译、汇编、链接和其它调式目的的程序,包括: ar 生成静态库;as 汇编器;ld 链接器(在链接过程中,由gcc调用链接器ld,将用户编译生成的目标文件连同系统的glibc启动代码链接在一起,形成最终的可执行文件);nm 查看目标文件中的符号; objcopy 将原目标文件中的内容复制到新的目标原创 2018-01-14 15:28:09 · 1984 阅读 · 0 评论 -
读取文件并输出,输出时将小写字母转为大写
1、获取文件属性(检查文件):stat() struct stat buf_stat;stat("temp.txt", &buf_stat);//#include // buf_stat.st_size2、打开文件:fopen()FILE *fp;fp = fopen("temp.txt", "rb");3、申请内存,并读取文件内容至该内原创 2018-01-06 12:29:46 · 3264 阅读 · 0 评论 -
读取文件并输出,输出时将小写字母转为大写 [ 2 ]
1 /* 2 * FILE: p48_file2lower.c 3 * DATE: 20180106 4 * -------------- 5 * DESCRIPTION: 读取文件内容,输出时将小写字母转为大写 6 * fopen, fread 7 */ 8 9 #include 10 #include // exit 11 #inc原创 2018-01-06 16:30:29 · 563 阅读 · 0 评论 -
移位代替乘除
加减法操作是计算机最喜欢的操作。其执行时间只占用1个时钟周期,是最快速的操作。 位运算与移位操作的执行速度和加减法接近。 乘法的执行时间要长一些,大概在5至6个时钟周期内完成。 除法的执行速度最慢,大约需要50个时钟周期才能完成。 由于移位指令的执行速度和加减法差不多,因此替换之后的程序执行速度也会快很多。对于乘法来讲,所有的乘法操作均可以由左移运算来替换。例如,a*8可以原创 2018-01-06 19:53:39 · 3084 阅读 · 1 评论 -
字符串去换行符 buf[len]
1、strlen() 1 #include 2 #include 3 4 int main(void) 5 { 6 char str[10] = "abc"; 7 int len = strlen(str); 8 printf("%d: %s\n", len, str); 9 str[len原创 2018-01-07 13:54:11 · 1714 阅读 · 0 评论 -
读取多个文件fgets并输出,每输出2行加一空行,static局部变量
FILE *fp = fopen(fileName, "r");if(fp == NULL){ perror("ERROR: fopen, fail to open file"); return -1;}while(fgets(buf, BUFFSIZE, fp) != NULL){}源代码 1 /* 2 * FILE: p原创 2018-01-07 14:13:59 · 748 阅读 · 0 评论 -
basename从argv[0]中截取文件名
C语言index()函数:查找字符串并返回首次出现的位置C语言rindex()函数:查找字符串并返回最后一次出现的位置 1 #include 2 #include 3 4 char *basename(char *fullname); 5 6 int main(int argc, char *argv[]) 7 { 8 ch原创 2018-01-24 11:49:43 · 1082 阅读 · 0 评论 -
Makefile
命令“make”、“make clean”注释用#号续行用反斜杠\ 1 # FILE: Makefile 2 # DATE: 20180107 3 # ============== 4 5 OBJECTS = p65_linkOperate_list.o p65_linkOperate_main.o 6 7 build: $(OBJECTS) 8原创 2018-01-07 20:16:44 · 133 阅读 · 0 评论 -
可变参数的函数,va_start(), va_arg(), va_end()
头文件 stdarg;类型va_list;宏va_start;宏va_arg;宏va_end 1 #include 2 #include 3 4 // 只能是3个点 ... 5 int printArgs(int begin, ...) 6 { 7 va_list ap; 8 char *p; 9 int co原创 2018-01-07 21:45:22 · 317 阅读 · 0 评论 -
可变参数的函数,myprintf,itoa
1、可变参数 头文件 stdarg;类型 va_list; 宏 va_start 到达可变参数的起始位置。初始化va_list类型的变量,使其指向可变参数列表的头(即第1个可变参数)。例:va_start(ap, str); 宏 va_arg 获取可变参数,当遇到一个结束标志时停止处理。返回一个可变长度参数的值,并使va_list类型原创 2018-01-08 10:54:14 · 264 阅读 · 0 评论 -
Linux C小项目 —— 简单的web服务器
简单的Web服务器实现一个基于HTTP通信协议的web服务器。客户端向服务器程序发送所需文件的请求,服务器端分析请求并将文件发送个客户端。1、整体程序设计客户端发送所需文件,服务器返回该文件,通信结束。服务器程序的任务大致分为3步:a、解析客户端程序发来的内容,找到需求文件的路径或者名字b、在服务器主机上查找该文件c、将该文件内容组织成客户端程序可以理解的形式,并将其发...原创 2018-02-05 21:48:16 · 6650 阅读 · 6 评论