随笔分类 - C/C++
编程语言和环境搭建
摘要:0.前言前文已经叙述道,linux中链表的实现是节点与数据分离,如果要使用链表,只需在数据结构中包含链表的结构(非指针)即可。struct nf_sockopt_ops的定义为struct nf_sockopt_ops { struct list_head list; u_int8_t pf; …… int ( * set )( struct sock * sk, int optval, void __user * user, unsigned int len); …… int ( * compat_get)( struct sock * sk, int optval, void __user
阅读全文
摘要:网上关于list的源码分析很多,这里只是学习做比较。list的数据结构定义/* *双链表 */ struct list_head { struct list_head * next, ** prev; }; 或许我们比较习惯如下的形式struct list_head { struct list_head * next; struct list_head * prev; }; 前文已经说明,这与传统的经典定义有差异,只有链接指针,而无数据节点。这样做是为了带来数据定义的通用性。在C++中,使用模板技术来实现,而C中并没有相关的技术,那么如何访问到节点上的数据呢,成为面临的挑战之一。1.声明关于的
阅读全文
摘要:以下分析文字转载自《程序员面试题精选100题(36)-在字符串中删除特定的字符》题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。要编程完成这道题要求的功能可能并不难。毕竟,这道题的基本思路就是在第一个字符串中拿到一个字符,在第二个字符串中查找一下,看它是不是在第二个字符串中。如果在的话,就从第一个字符串中删除。但如何能
阅读全文
摘要:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输入的数字。可惜这种思路需要的时间复杂度是O(n2)。但是上述策略并没有考虑到数组是有序的特性。此处是不是可以在有序的基础上作工作呢?思路如下:找到数组的第一个数字和最后一个数字。当两个数字的和大于输入的数
阅读全文
摘要:转载自《Linux中的工作队列》http://blog.chinaunix.net/space.php?uid=487105&do=blog&cuid=971040[前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。***************************************************************************************************************
阅读全文
摘要:上篇分析了hashtable实现的相关接口与用法,本篇将深入到代码中,分析其代码原理。其源码有hash_function.h ——实现hash函数hash_table.h ——hashtable的实现list.h ——hashtable的开链法用到了链表test_hashtable.c ——测试结构定义用于链接节点的hash_entrystruct hash_entry { struct list_head list; unsigned char *key; unsigned int keylen;};用于全局结构的hash_tablestruct hash_table { struct ha
阅读全文
摘要:阅读代码上瘾了么?又看到一份代码,觉得很符合自己的风格,就贴上来。/* implementation of a simple hash table * -- thread safe functions as *_safe() * -- resolve collisions by chaining * Direct comments, concerns, questions, bugs to: * kulesh [squiggly] isis.poly.edu */该实现考虑到了线程安排,与STL的hashtable思想一致,都是基于resolve collisions by chaining(
阅读全文
摘要:GCC编译出现警告test_hashtable.c:52: warning: pointer targets in passing argument 3 of ‘hash_table_insert’ differ in signednesstest_hashtable.c:61: warning: pointer targets in passing argument 2 of ‘hash_table_lookup_key’ differ in signednesstest_hashtable.c:77: warning: pointer targets in passing argument
阅读全文
摘要:学习链表的实现,还是觉得linux下的显得不错。今天爬取了份可以用在linux下的代码。不必要重复造轮子了。对于这份代码的详细说明,请参考 《Linux Kernel Linked List Explained》如下代码的获取路径http://isis.poly.edu/kulesh/stuff/src/klist/list.hlist.h 1 #ifndef __LIST_H 2 #define __LIST_H 3 4 /* This file is from Linux Kernel (include/linux/list.h) 5 * and modified by simply re
阅读全文
摘要:list链表是双链表,在libnet中的实现同样简单,其借用了linux中list的实现思路,将指针域与数据域分离。要用list也是跟list中一样的。如下是指针域的实现代码——为了方便阅读,我用linux下的风格将语句分开了。/* Linked list code, inspired by Links, but written from scratch. */struct list_head { void *next; void *prev;};#define init_list(L) \ do { \ L.next = L.prev = &L; \ } while (0) #def
阅读全文
摘要:libnet 是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据报的构造、处理和发送功能(百度百科上有很详细的介绍哦)。貌似我下载的版本与网上教程说的不太一致。我在sf上下载的最新版,但是却是0.10.11版——网上有说1.0版的,我到底该信谁的呢!今天无意中看到该库的循环队列的实现,感觉真是简洁啊!有木有啊!!!/* Queues. */#define QUEUE_SIZE 2048struct queue { unsigned char data[QUEUE_SIZE]; int head, tail;};#define queue_wrap(x) ((x) & (QUE
阅读全文
摘要:我用gcc编译,有std=c99选项。出现mylist.c:88: warning: implicit declaration of function ‘typeof’mylist.c:88: error: expected expression before ‘)’ tokenmylist.c:88: error: expected expression before ‘)’ tokenmylist.c:91: error: expected expression before ‘)’ tokenmylist.c:91: error: expected expression before ‘
阅读全文
摘要:遇到一段代码,觉得很迷糊,觉得不对。于是做了个测试,代码如下#include <stdio.h>int main(){ int flag = flag ;//flag哪里定义? flag = 1; printf("flag is %d\n",flag);}在gcc下竟然可以通过,输出也是对的。如果不赋值的话,flag输出的为无意义值于是产生为什么flag不提示未定义的疑问,这是什么语法?gcc连警告都不提。水木上的牛人给出了网址http://cpp-style.info/Addison.Wesley-CPP.Gotchas-Avoiding.Common.Pro
阅读全文
摘要:cURL是个非常不错的工具,同时libcurl 是一个很不错的库,支持http,ftp等很多的协议。好久之前就想学习下。cURLcpp是cURL的一个封装。有兴趣的同学可以尝试下。请参考文章《在 Windows 上编译(安装)和使用 libcurl》。如果不想自己编译,可以下载官方上编译好的库文件。一般比最新的版本低,下载地址为http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel-msvc。可以参照上面的文章设置include 和lib路径,具体来说就是1)新建一个console工程,将下载包解压到的include 和lib拷贝到工程中(或者设
阅读全文
摘要:在lwip协议栈中,在tcp.c中有如下代码#if SO_REUSE && SO_REUSE_RXTOALL if ((broadcast || ip_addr_ismulticast(¤t_iphdr_dest)) && ((pcb->so_options & SOF_REUSEADDR) != 0)) { ………………………… }#endif /* SO_REUSE && SO_REUSE_RXTOALL */对于其上的两个条件编译选项,其定义在opt.h中/** * SO_REUSE==1: Enable
阅读全文
摘要:前言 在网上发现关于此的文章转载到处都是。我也就不再做重复性的工作了,将我觉得重要的做下笔记就好了,整理下思路。概况 链表是经典的组织有序数据的数据结构,是线性表的一种重要实现方式(另外一种是数组)。其基本思想是通过指针将一系列数据节点连接成一条数据链,达到有序组织数据的目的。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。按照指针域的组织以及各个节点之间的联系
阅读全文
摘要:《win7下 VC6 打开添加无法使用的解决办法》出现 “unresolved external symbol __beginthreadex”错误找到文章《unresolved external symbol __beginthreadex错误的解决——谈谈在Win32 Consle Application如何使用MFC类》接着 出现 dll丢失弹出窗口安装winpcap即可。http://files.cnblogs.com/westfly/FileTool.rar里面已经包含发行版的 FileTool.dll,直接拷贝到相关的目录即可。
阅读全文
摘要:原题为 C++#面试每日一题#(16):运行下图中代码,输出的结果是什么?代码如下#include <iostream>using namespace std;struct A { virtual void print(int super = 10) { cout<<"std : from A "<<super <<endl; }};struct B:public A{ virtual void print(int super = 20) { cout<<"std : from B "<&
阅读全文
摘要:题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析此题的文章很多(能够讲解清楚是种能力),给出参考性代码,用代码说话#include <stdio.h>#include <memory.h>/***********************************************************************************36输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,
阅读全文
摘要:学习TCP/IP,选用代码较为小巧的LwIP,搜索到Google的开源项目:LwIP-Win32在官方文档上说执行以下步骤即可开始: 1. 本项目目前只能在有线局域网内工作,因此您需要先确认您的计算机是否处于这样的工作环境。 2. 本项目依赖于winpcap,您可以从http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe 下载。 3. 使用subversion客户端从http://lwip-win32.googlecode.com/svn/trunk/ 下载代码。4. 打开下载文件夹下的lwipwin32.sln,编译之后即可开始调试。 5.
阅读全文

浙公网安备 33010602011771号