C经典程序集锦

集锦一:

#include <stdio.h>

int array[]={23,34,12,17,204,99,16};

#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))

int main()

{

int d=-1;

int x;

if(d <= TOTAL_ELEMENTS-2)

printf("Hello World.\n");

system("pause");

return 0;

}

TOTAL_ELEMENTS所定义的值是unsigned int 类型......

指针二三事

有同事今天问我一个指针的问题,没深究原因,下班回来静下心来分析分析,写下这篇文章,如有任何疑问请留言.

问题一

要实现一个函数,我们姑且理解成函数内部 malloc申请一块内存,然后针对这块内存做一系列操作,操作这部分姑且不用实现,我们要返回申请的这片内存的地址.

version 1

如果你拿到这个问题就立刻编写代码的话极有可能这么写:

/*

Name: 二级指针

Copyright: 52coder.net

Author: 52coder

Date: 03/06/17 17:24

Description: pointer

*/

#include <stdio.h>......

柔性数组

#include <stdio.h>

#include <malloc.h>

typedef struct _soft_array

{

int len;

int array[];//int array[0];两种形式

}SoftArray;

int main()

{

int i = 0;

SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeof(int) * 10);

sa->len = 10;

for(i=0; i<sa->len; i++)

{

sa->array[......

细说指针

因为在工作中踩到了指针相关的坑,所以在这里记录下来问题产生的原因,以免再次遇到同样的错误。如果你对文章中的观点、内容存在不一样的看法,欢迎通过关于博主页面中的Email与我联系。

需求:

将代码提取成函数,代码如下:

mr_cfg_bsc_info_t *mir_list = NULL;

mir_list在主函数中是一级指针的形式,我提取函数时接口用了二级指针如下格式:

int32_t mirror_suspend_flag_abnormal_handle(mr_cfg_bsc_info_t *mir_info,lun_info_t *lun_info,uint32_t m......

解读C的声明

No 1.

int (*func_p)(double)

解读:

func_p首先是一个函数指针.

func_p是一个指向参数为double,返回值为int的函数指针.

No 2.

int *hoge[10]

hoge是一个指向int的指针的数组(元素个数为10)

No 3.

double (*array_p)[3]

array_p是指向double(元素个数为三)的数组的指针

array_p = &array;这样赋值没有问题,因为类型相同。

如果array_p=array编译器就会发出警告,提示如下:

指向int的指针和指向in......

Linux内核目录结构

一、目录结构

Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。

内核源代码下载地址:www.kernel.org

arch目录

arch是architecture的缩写。内核所支持的每种CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等。

| --x86 /* 英特尔cpu及与之相兼容体系结构的子目录*/

| |--boot /*引导程序*/

| | |--compressed /*内核解压缩*/

|......

Linux内核链表学习

本文参考内核代码2.6.9 List.h中相关代码,如有疑问欢迎评论.

链表

链表是线性表的一种,可以高效地在链表中的任意位置实时插入、删除数据。链表的开销主要是访问的顺序性和组织链的空间损失.

通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。

内核代码2.6.9中链表结构定义如下:

struct list_head {

struct list_head *next, *prev;

};

这个结构跟我们之前看到的不太一样,没有数据域,这样做的好处是具备了通用型.

链表可以分为单链表、双链表、循环链表等多种类型,下面......

Linux命令行总结

Day 1

grep 命令

grep命令显示文件和输入流中和参数匹配的行,下面的命令显示文件/etc/passwd中包含文本root的所有行:

grep root/etc/passwd

在对多个文件进行批量操作的时候,grep命令非常好用,如果要查看/etc中所有包含root的文件,可以执行以下命令:

grep root/etc/*

Day 2

less命令

当要查看的文件过大或者内容多的需要滚动屏幕的时候可以使用less命令。

例子:

less /usr/share/dict/words

使用/word从当前位置向前搜索word这个词

使用?w......

Linux系统管理手册

HWManager -t -oppwrctl -pwron 对端开机

HWManager -t -oppwrctl -foff 对端关机

HWManager -t -host -rst 本端开机

HWManager -t -host -foff 本端关机

问题单提交规范:

【问题描述】

【操作步骤】

【预期结果】

【实际结果】

【问题定位】

【问题解决】

【问题验证】 按照提单步骤验证,验证通过,请审核!!!

【SVN】

编译内核升级方法如下:

1、将*.tgz文件拷贝到编译环境的/......

List_enty探究

#define list_entry(ptr, type, member) \

((type *)((char *)(ptr) – (unsigned long)(&((type *)0)->member)))

can somebody please explain what is this and how does it work, thanks in advance.

P.S. please simplify your answer as much as possible, I know about threads, processes in Linux, n......