随笔分类 - Linux
Linux使用心得
摘要:参考Posix线程编程指南(2)范例的代码其实意义不大,child2函数完全没有必要。作者没有解释对于struct等复杂类型该如何做的问题,也就是为什么会有echomsg的问题。1.echomsg 其实是个注册的destructor,永远释放在线程中分配的私有数据,由于pthread_setspecific(key,(void *)tid);只能对指针进行操作,所以malloc之类的操作必不可少。2.对于struct的读写,需要分配一个struct类型的变量。具体的代码如下。#include <stdio.h>#include <stdlib.h>#include &l
阅读全文
摘要:其实atoi比较简单些。一般处理也简单(无须考虑基数等问题,默认10为底),无非要注意符号的处理和可能的空格处理。#include <ctype.h>int yang_atoi ( const char * str ){ int n=0; int sign; char *p = (char *)str; while(isspace(*p)) ++p; sign = (*p == '-')?-1:1; if((*p == '+')||(*p)=='-') ++p; while(isdigit(*p)) n = 1...
阅读全文
摘要:iconv命令用法如下:iconv [选项...] [文件...]有如下选项可用:输入/输出格式规范:-f, --from-code=名称 原始文本编码-t, --to-code=名称 输出编码信息:-l, --list 列举所有已知的字符集输出控制:-c 从输出中忽略无效的字符-o, --output=FILE 输出文件-s, --silent 关闭警告--verbose 打印进度信息
阅读全文
摘要:在Linux中,链表有list与hlist的区别,其各自定义如下struct list_head { struct list_head *next, *prev; };struct hlist_head { struct hlist_node *first; };struct hlist_node { struct hlist_node *next, **pprev; };可以看出,其都为双向链表。双头(next,prev)的双链表对于Hash表来说“过于浪费”,因而另行设计了一套Hash表专用的hlist数据结构——单指针表头双循环链表,hlist的表头仅有一个指向首节点的指针,而没有指向尾
阅读全文
摘要:以下文字摘自 http://zhedahht.blog.163.com/blog/static/25411174200952174133707/题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。分析:这是09年6月份百度新鲜出炉的一道面试题,从这道题我们可以看出百度对应聘者在算法方面有很高的要求。这道题其实是希望我们能找到一个排序规则,根据这个规则排出来的数组能排成一个最小的数字。要确定排序规则,就得比较两个数字,也就是给出两个数字m和n,我们需要确定
阅读全文
摘要:一直使用xshell工具,但是上传和下载文件都得要借助其它工具,觉得不是很爽。于是干净利落的换SecureCRT。安装可以选择绿色版的,该软件有试用期。在使用rz和sz前要在linux下安装lrzsz,否则会出现“rz: command not found”等提示.(设置SecureCRT的颜色,点击”会话选项”–”仿真”–终端选择”linux“–并且勾选ANSI如果还不能显示vim的颜色就先exit再登陆就OK了!)下面内容转载自《用SecureCRT来上传和下载数据》使用Zmodem从客户端上传文件到linux服务器1.在用SecureCRT登陆linux终端.2.选中你要放置上传文件的路
阅读全文
摘要:由于安装的时候选的是全英文环境,所以对中文的支持有乱码,必须自己手动解决。该文章定期更新,估计我遇到关于乱码的解决都会在这里记录下来 。ps:请确定你已经安装了相关的编码环境。1.gedit乱码解决:运行gconf-editor–>app–>gedit2–>preferences–>encodingsauto_detected 应该是没有GBK,或者GB2312,添加上GBK就可以(全写上也无所谓).这样再次用gedit打开gb2312编码的文本就不会有内容乱码..2.vim乱码解决:在/etc/vim/vimrc文件中添加如下代码:let &termencod
阅读全文
摘要:更新debian的更新源,选择用中科大的源,对于教育网来说比较快。编辑文件sudo vim /etc/apt/sources.lst 添加源内容,把原来的注释,然后sudo apt-get updateIPv4版deb http://debian.ustc.edu.cn/debian lenny main contrib non-freedeb-src http://debian.ustc.edu.cn/debian lenny main contrib non-free deb http://debian.ustc.edu.cn/debian-security lenny/updates m
阅读全文
摘要: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.声明关于的
阅读全文
摘要:转载自《Linux中的工作队列》http://blog.chinaunix.net/space.php?uid=487105&do=blog&cuid=971040[前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。***************************************************************************************************************
阅读全文
摘要:阅读代码上瘾了么?又看到一份代码,觉得很符合自己的风格,就贴上来。/* 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 ‘
阅读全文
摘要:在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
阅读全文
摘要:前言 在网上发现关于此的文章转载到处都是。我也就不再做重复性的工作了,将我觉得重要的做下笔记就好了,整理下思路。概况 链表是经典的组织有序数据的数据结构,是线性表的一种重要实现方式(另外一种是数组)。其基本思想是通过指针将一系列数据节点连接成一条数据链,达到有序组织数据的目的。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。按照指针域的组织以及各个节点之间的联系
阅读全文
摘要:原题为 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 "<&
阅读全文

浙公网安备 33010602011771号