
Linux C语言
文章平均质量分 66
marytime
捷径虽好,但有时路远点也有它独特的优势
展开
-
结构体的指针成员初始化问题
memset(cache, 0, sizeof(*cache));所有成员变量的值都是0 , char [10] 型 "\0", int 是 0, struct Node * 是NULL。声明为全局量,会自动初始化为上述值。typedef struct cacheEntryS { int key; /* 数据的key */ int value; /* 数据的data */...转载 2020-02-03 11:09:45 · 5970 阅读 · 0 评论 -
二维指针(C语言)
int** table=malloc(20);table[0] = 1; printf("%d", table[0]);输出1,相当于把一个二维指针当做一维用了,在本来要放地址的地方,填了数字1 。*table = malloc(10);table[0] = 1;(*table)[0] = 0;是错误的,因为(*table)位置填了1,不是地址了。int** ta...原创 2020-01-31 11:46:30 · 616 阅读 · 0 评论 -
建立书籍的词索引表
数据结构(C语言版)第四章P86-89 建立词索引表参考链接 1:http://blog.chinaunix.net/uid-25996097-id-4299764.html?utm_source=jiancool本程序的问题:1 书籍索引不是按顺序排列;2 int ExtractKeyWord(WordListType *wdlist)函数对文件最后一行的处理还是有问题,因为...原创 2019-11-27 21:08:37 · 1429 阅读 · 0 评论 -
函数作为函数参数
#include <stdio.h>int ff(int(*p)(int,int),int a,int b)//原始写法,阅读不便{return p(a,b);}typedef int(*Pfun)(int,int);//定义函数指针类型,同时申明了原型 返回int 两个int形参int f(Pfun p,int a,int b) //改进写法 易懂{return p(...转载 2019-11-19 21:13:22 · 5024 阅读 · 0 评论 -
C语言中函数返回字符串的四种方法
转自https://www.cnblogs.com/qingergege/p/6496683.html参考《C语言深度剖析》P120在讨论着四种方法之前,首先要对函数有一个简单的认识,无论是在形实结合时,还是在return语句返回时,都有一个拷贝的过程。你传进来的参数是个值,自然函数在工作之前要把这个值拷贝一份供自己使用,你传进来的是个地址,函数也就会拷贝该地址供自己使用。同样return...转载 2019-05-25 10:38:00 · 1363 阅读 · 0 评论 -
函数内部使用malloc问题汇总
转自:https://bbs.youkuaiyun.com/topics/391926409在函数里malloc,如何将地址传到函数外?一种是用return把地址带出来,也可以用二级指针将函数内的地址带出func(structnode*p)这个是对指针p指向的节点进行修改func(structnode**p)这个是对p指针本身进行修改(一般会改变p的指向)转自:https://www...转载 2019-10-11 10:04:29 · 1516 阅读 · 0 评论 -
小问题汇总——i++,strcpy函数,*p==0判断
#include <stdio.h>#include <stdbool.h>bool isMatch(char * s, char * p){ if(*p == 0) return *s ==0; /*字符串结束符 '\0' 的 ASCII 值 正好是 0。 所以 用 0 判断 和 用 '\0'判断,结果一样。 用 '\0' 用 0 完全...原创 2019-10-11 10:18:56 · 662 阅读 · 0 评论 -
二维指针
二维指针是指向一维指针的地址。当你的一维指针的值修改了,但是二维指针的值并没有改变,对吧。因为指针就是指向地址的,你并没有对其进行修改,而是改写了一维指针值。p++执行后,p的地址由p向下移了一位,但是原值并没有改变。int** malloc2d(int row, int col){ int** ret = NULL; if( (row > 0) &...转载 2019-10-11 11:39:28 · 339 阅读 · 0 评论 -
redis压缩列表(节点插入-----代码学习)
在压缩列表的数据结构设计中,一个节点在previous_entry_length字段保存了前一节点的长度,在encoding保存当前节点的长度,在content保存数据内容。函数学习static unsigned char *__ziplistInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsign...原创 2019-01-26 11:31:33 · 717 阅读 · 0 评论 -
redis整数集合升级扩容(代码学习)
redis整数集合有固定的数据类型,比如是整数集合是int32_t类型,新增一个int64_t类型的整数,就需要对整个集合进行升级。redis的程序值得学习的地方太多。一、升级升级分为两步:扩容 + 填数1.1 新增值的类型判断static uint8_t _intsetValueEncoding(int64_t v) { if (v < INT32_MIN...原创 2019-01-23 23:01:28 · 623 阅读 · 0 评论 -
《Linux编程手册》数据报客户端例子
关于recvfrom中是否需要指定接收地址,如果有兴趣定位发送者,可以使用recvfrom来得到数据发送者的源地址。// numBytes = recvfrom(sfd, resp,BUF_SIZE, 0, NULL, NULL); numBytes = recvfrom(sfd, resp,BUF_SIZE, 0, (struct sockaddr*)&...原创 2018-03-04 16:00:46 · 179 阅读 · 0 评论 -
单链表
在看nmap的源码中nsock时,对于其中ghlist的设计有些不太懂,so重学链表。单链表链表结构typedef struct Node{ int data; struct Node *next; }NODE, *PNODE;初始化表头 PNODE pHead; pHead = malloc(sizeof(struct Node));...原创 2018-04-18 22:30:08 · 247 阅读 · 0 评论 -
网络编程定式总结
数据报socket编程 服务端:struct sockaddr_in svaddr,claddr; int sockfd; char buf[256]; sockfd = socket(AF_INET, SOCK_DGRAM,0);//创建socket memset(&svaddr, 0x00, sizeof(struct socka...原创 2018-05-08 22:31:48 · 211 阅读 · 0 评论 -
vfprintf使用学习
nmap中将vfprintf用于日志记录void nsock_trace(mspool *ms, char *fmt, ...) { va_list ap; int elapsed_time_ms; assert(ms->tracefile != NULL); elapsed_time_ms = TIMEVAL_MSEC_SUBTRACT(nsock_tod, ms-&g...原创 2018-04-25 21:59:55 · 1334 阅读 · 0 评论 -
使用memcpy将一个字符串添加到另外一个字符串之前
nmap中字符串添加的功能函数/* Prepend an n-char string to a filespace */int fs_prepend(char *str, int len, struct filespace *fs){ char *tmpstr; if (len < 0) return -1; if (len == 0) return 0;...原创 2018-04-25 23:03:27 · 1581 阅读 · 0 评论 -
Nmap中用到的tcp选项解析函数理解
理解tcp选项的解析时有一些困难,这里记录一下。 (u8*) tcp + sizeof(struct tcp_hdr) /*是选项开始位置,因为tcp头部中包含选项,所以th->off这个头部长度是含有option的长度的,但是tcp_hdr结构的定义中不含选择,所以,tcp指针的地址+tcp_hdr结构长度就是选项的开始位置。 ...原创 2018-05-05 19:20:31 · 395 阅读 · 0 评论 -
c编程小问题汇总:类型冲突,inet_ntop使用,结构体初始化,数组初始化为1
问题1.类型冲突错误:与‘getmyip’类型冲突static char *getmyip(char *intf_name)函数没有声明。定义或声明应该在使用函数之前问题2.段错误数组没有初始化inet_ntop将数值格式(addrptr)转换到表达式(strptr)。inet_ntop函数的strptr参数不可以是一个空指针。inet_ntop(AF_INET...原创 2018-05-12 11:45:19 · 2269 阅读 · 0 评论 -
Nginx
Nginxhttps://github.com/taobao/nginx-book转载 2018-04-27 19:59:52 · 152 阅读 · 0 评论 -
编写hello内核模块--fedora21环境
1、编写内核模块参考:https://blog.youkuaiyun.com/sh21_/article/details/60878812hello.c --- 注意函数参数中void ----hello_init(void)#include <linux/module.h>#include <linux/kernel.h>static int hello_init(void)...原创 2018-05-16 22:27:53 · 334 阅读 · 0 评论 -
双向链表
在学习redis源码的同时,模仿redis链表写成的。头文件 adlist.h#ifndef ADLIST_H#define ADLIST_H#include <string.h>#include <stdlib.h>#include <stdio.h>typedef struct listNode { struct listNod...原创 2019-01-06 17:52:37 · 131 阅读 · 1 评论 -
redis跳转表学习与理解
学习跳转表,记录一些自己的理解。这篇文章介绍了跳转表http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html。这就是跳转表示意图。第1章 普通跳转表——节点插入节点插入代码如下:boolean insert(l,key,value) register list l; register keyType...原创 2019-01-17 11:56:47 · 368 阅读 · 0 评论 -
使用mmap和memcpy编写文件复制程序
开始没有区分好匿名内存和文件映射之间的区别,而出现了一些错误。/********************** > File Name: test_cp.c > Created Time: 2018年03月03日 星期六 09时55分29秒 ****************************/#ifdef USE_MAP_ANON#define _BSD_S...原创 2018-03-03 19:49:06 · 2651 阅读 · 0 评论