c语言

  • 数据结构:栈(用数组实现)

    以下是完整代码: /* * this file if an implementation of stack with array list * file name: ArrayStack.c * author: John Woods * date: 2015/5/10 * statement: anyone can use this file for any purpose */ #include <stdio.h> #include <stdlib.h> #include <

    数组, 数据结构, c语言, May 10

  • 数据结构:栈(用链表实现)

    以下是完整代码: /* * this file is an implementation of stack with linked list * file name: stack.c * author: John Woods * date: 2015/5/9 * statement: anyone can use this file for any purpose */ #include <stdio.h> #include <stdlib.h> #define BOOL int

    数据结构, c语言, May 9

  • 数据结构:链表

    下面是完整的代码: /* * Data Structure * this file is the implementation of the Linked List * author: John Woods * date: 2015/5/7 * statement: anyone can use this file for any purpose */ #include <stdio.h> #include <stdlib.h> #include <malloc.h>

    数据结构, c语言, 链表May 8

  • 数据结构:顺序表

    /* * this c file is a implementation of linear list * author: John Woods * date: 2015/5/3 * exclaim: anyone can use the file to any purpose */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define INIT_LEN 20 #define INCREME

    数据结构, c语言, 顺序表, 清空缓冲区May 6

  • C语言杂谈:指针与数组 (下)

    思维导图 介绍 前接上文C 杂谈之 指针与数组 (一),接续往下谈指针和数组. 指针与数组 --承接上文进行扩展 你知道X = Y,在编译运行过程中,是什么样吗? 字符指针与函数 1> 字符串是一个以"结尾的字符数组. 看一个例子:printf接受的是一个指向字符数组第一个字符的指针. 这个例子与下面两个代码是一个道理. 2> 几个常用字符函数的编写. 1>>> strcat(s,t)函数,把t指向的字符复制到s指向的字符后面?--注意" #include

    指针, c语言May 3

  • C语言杂谈:指针与数组 (上)

    思维导图 介绍 1> 指针定义:指针是保存变量地址的变量. 2> 本文重点 >> 指针与数组之间的关系 >> 操纵指针的规则 3> 指针优点 >> 表达某个计算的唯一途径 >> 代码更高效,更紧凑 4> 指针缺点:难以理解,但是用好了,代码会非常清晰. 5> 将指针.数组和地址的算术运算集成在一起是C语言的一大优点. 指针与地址 1> 内存组织方式 (1) 内存是一个个单元组成的,每一个内存单元中存放一个字节(8位)的二进

    指针, c语言May 3

  • c语言之二级指针

    分析二级指针:都是围绕着以下几点来变的 1.对原始变量进行赋值,则原始变量.指向他的一级指针.二级指针值都会改变 简单点就是:对num,*p_num,**pp_num中任何一个赋值,这三个的值都会改变 2.对一级指针进行赋值,只改变一级指针和二级指针的值,一级指针原来指向的值不会改变, 简单点:对p_num,*pp_num中任何一个进行赋值,这俩的值都会改变,num的值不会改变,新值是对p_num赋值的新一级指针所指向的值 现在需要一点耐心,举一个简单的小例子: #include <stdio.

    指针, c语言, 二级指针April 25

  • C 语言内嵌汇编栈指针问题

    今天在学习 C 语言内嵌汇编的实验过程中,发现内嵌汇编极容易造成段错误.经过分析,我发现错误源于对于栈指针 esp 的不当操作导致的,现将整个问题记录如下. 实验需求是,在内存中分配一段空间用作函数调用栈.代码如下: /* test.c */ #include <stdio.h> #define STACK_SIZE 1024 // 1K int main(void) { unsigned char stack[STACK_SIZE]; int i; // A. Initialize stac

    c语言, 汇编语言March 11

  • extern关键字

    extern很难理解的地方在于:我们通常不知道这个关键词出现的时候到底是定义还是声明 谨记:声明可以多次,但是定义只能一次 函数定义时的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern,但是引用的时候一样是需要声明的. 而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显示的初始化,同样成为了变量的定义,为了避免重复定义,此时必须加extern.而编译器在此标记存储空间在执行时加载,如内存初始化为0 .而局部变量的声明不能有ext

    extern, c语言December 20

  • C语言动态申请二维数组

    int **a; int i; a = (int **)malloc(sizeof(int *)*5); for (i=0; i<5; i++){ a[i] = (int *)malloc(sizeof(int)*3); } for (i=0; i <5; i++){ free(a[i]); } free(a); 或者: int (*p)[10]; p=(int(*)[10])malloc(sizeof(int)*20); 参考: [1]. http://bbs.csdn.net/topics

    数组, c语言December 20

  • C语言示例

    debug_pos.h /*************************************************************************** Copyright (C), 2008-2015, LSGX. lsgxeva team. All rights reserved. FileName: debug_pos.h ModuleName: debug_pos Version: 1.0 Date: 2014-11-14 22:55:26 CPU: x86 RT

    c语言, LinuxDevNovember 19

  • C语言的const限定符

    const限定的内容真的无法修改吗? 关键字const并不能把变量变成常量.在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(或外部)来修改这个值. 上代码,测试: #include <stdio.h> int main(void) { const int a = 10; // const 限定 int *pa = &a; // 使用未限定的指针指向a printf("a = %d; (*pa) =

    c语言, C的困惑November 2

  • C语言的typedef

    typedef为数据类型创建别名,不会引入行的数据类型. 看书时遇到了类似如下的自定义数据类型: typedef struct { int data_a; }St[MAXSIZE]; 在定义变量时,是怎样的?函数传参时,数据是按值传递,还是只传递指针?有点困惑,估计会和数组类似.于是写了段代码,将该自定义类型和数组放在一起测试.(测试环境 Ubuntu 14.04 64位) /* 测试typedef */ #include <stdio.h> #define MAXSIZE 5 typedef

    c语言, C的困惑November 1

  • EclipseforC/CPP 之配合 doxygen + graphviz 生成HTML代码文档
    EclipseforC/CPP 之配合 doxygen + graphviz 生成HTML代码文档

    JAVA语言中的代码注释那是相当好的一个东西,尤其是使用了Eclipse之后,简直是程序员的福音.小弟前几天用了一下午的时间,经过在网上的查找以及我一点点的探索,终于搞定在windows平台下,使用 Eclipse for c/cpp + doxygen + graphviz 自动提示代码注释以及生成HTML格式的文档. 还不知道doxygen的同学,请自行百度/Google 声明:JDK以及mingw的安装和配置请自行解决,这里的测试以C语言为主 使用到的软件: jdk mingw eclip

    eclipse, cpp, doxygen, c语言, for, 文档注释October 20

  • flex词法分析器简介

    flex和bison是用来生成程序的工具,它们生成的程序能够处理结构化输入.起初它们被设计用来作为编译器的一部分进行词法和语法分析,但是后来证明它们在其他领域也十分有效,因此并不是只有学习编译原理的同学需要学习它们,使用c语言的同学都可以学习并使用它们,下面我先简单介绍flex词法分析器.(注意,我介绍的flex并不是指adobe flex) 简单来说,词法分析器把输入分割成一个个有意义的词块,成为记号(token),而语法分析则是确定这些记号是如何彼此关联的,例如下面的一个C片段: alpha

    linux, Flex, c语言, 词法分析器October 8

  • C语言的面向对象设计 -- 对 X264/FFMPEG 架构探讨
    C语言的面向对象设计 -- 对 X264/FFMPEG 架构探讨

    类似题目的文章已经不新鲜了,这里,我仅仅总结自己的一些代码经验,结合两款在视频开发领域比较常用的开源软件探讨C语言的应用问题. 1.为什么要用C语言 曾几何时,我也不熟悉C,最早接触C的是在大学四年级,当时已经学过pascal,过二级也是pascal.接着走上了Delphi的路,多方便的软件,写写画画,程序就出来了,本科的毕业设计就是这样出来的MIS,在当时还很时髦的花哨了一阵,弄了个优秀论文.当有一天,看到别人的代码,一行行的,整齐的缩进,而略为难理解的*号,一下被这种语言难住了.于是拿着国内

    ffmpeg, x264, 设计, c语言, 架构August 16

  • 使用 JNA 模拟C语言结构体的完整源代码

    C语言源代码: 头文件 #define MYLIBAPI extern "C" __declspec( dllexport ) MYLIBAPI void say(wchar_t* pValue); struct UserStruct{ long id; wchar_t* name; int age; }; MYLIBAPI void sayUser(UserStruct* pUserStruct); struct CompanyStruct{ long id; wchar_t* na

    struct, jna, Java, c语言, 源代码August 16

  • 函数作用域的静态变量

    下面这段话来自百度百科: 静态局部变量属于静态存储方式,它具有以下特点: (1) 静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失.静态局部变量始终存在着,也就是说它的生存期为整个源程序. (2) 静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量.退出该函数后, 尽管该变量还继续存在,但不能使用它. (3) 允许对构造类静态局部量赋初值.若未赋以初值,则由系统自动赋值.数值型变量自动赋初值0,字符型变量赋空字符

    c语言, C的困惑July 26

  • 回溯法求解数独算法(C语言)

    没有对输入的待解数独进行一般性验证(同一行.一列以及同一个小九宫格都不能出现重复数字) 算法利用回溯的思想: 从第一个空白处开始,找到其候选解(排除同行.同列以及同一小九宫格的所有出现过的数字,剩下未出现的数字都是候选解)的第一个值填入数独. 对第二个空白执行第一步(前面所填入的数字对此空白处有影响). 当出现某个空白的候选解个数为0时,就开始回溯,找到第一个候选解多于一个的,将其在使用的候选解设为不可取(本程序取值为-1),找到其下一个候选解,继续上面的步骤! 直到所有空白处填满,运算完成,输

    c语言, 回溯法, 求数独的解July 7

  • 关于第四章条纹图案的另一种实现

    bootasm.asm使用了nasm格式代码,作用是切换到vga显示模式,开启A20地址线,设置GDT,进入保护模式,跳入32位汇编代码段,调用C语言编写的函数. 代码如下: extern bootmain [bits 16] global start start: ; 切换显示模式,320*200*8位彩色模式 ; 来自于<30天自制操作系统> mov al, 0x13 mov ah, 0x00 int 0x10 ; 下面代码来自于XV6 cli xor ax, ax mov ds, ax

    操作系统, 汇编, c语言June 9

  • C语言位操作时注意变量数据类型

    如果要用4个单字节字符变量来填充1个整型变量可以这样做: int a=0; char b[4]; for(j=0; j<4; j++) { a |= b[j]<(8*j); } 但这样做结果是不对的,因为b为char类型数组,为有符号数.而a为整型,因此b[j]首先会进行符号位扩展. 如果b[j]的高位为1,则在左移之前首先将高字节都扩展为ff.因此最终结果不正确. 将数组b定义为无符号字符数组即可: int a; unsigned char b[4]; for(j=0; j<4; j+

    c语言, 位操作, 有符号无符号数June 8

  • 一款由c语言编写的音乐播放器
    一款由c语言编写的音乐播放器

    一款由c语言编写的音乐播放器http://pan.baidu.com/s/1qWlV5BA

    c语言, 音乐播放器, DERLApril 12

  • C语言自学---- C语言知识总结

    一.函数 什么情况下需要定义一个函数? 常用的功能 重复的功能 低效率的代码 一个函数可以没有参数 void test(void){ //void可以不写 //函数体中不用写返回函数(return) } 一个函数可以没有返回值,如果没有定义,默认是返回int类型 test(int a, int b){ //返回值类型可以不写,如果不写,默认为返回int类型 } 在没有接触指针前,函数中的形参是修改不了实参的值的 函数从源文件自上往下执行编译,所以在调用函数之前,需要声明函数 函数内部定义不能和形

    编程语言, c语言April 5

  • C语言自学---- 指针

    指针初探 指针是C语言中最强大的工具之一 可以存储地址的变量称为指针(pointers) 存储在指针中的地址通常是另一个变量 首先看看变量在内存中是如何存储和访问的 代码示例: <!-- lang: cpp --> //在程序中使用变量名引用这块内存 //但是一旦编译执行程序,计算机就使用内存位置的地址来引用它(其中存储了变量值) //这条语句会分配一块内存来存储一个整数,使用`number`名称可以访问这个整数 //值5存储在这个区域中,计算机用一个地址引用这个区域 //存储这个数据的地址取

    编程语言, c语言March 23

  • C语言自学中篇 ---- 变量.类型.运算

    使用浮点数 浮点数包含的值带小数点,也可以表示分数和整数 下面是一些浮点数 1.6.0.00008.7655.899.100.0 用指数和C语言来表示 1.6== 0.16E1 E代表10,1代表1次方 定义浮点数变量 <!-- lang: cpp --> /* float类型占用4字节,精确到6至7位小数,小数后面加f double类型占用8字节,精确到15位小数 long double类型占用12字节,精确到18位小数,小数后面加L */ int main(){ float aa = 45

    编程语言, c语言March 16

  • C语言自学上篇 ---- 变量.类型.运算

    计算机内存 计算机执行程序时,组成程序的指令和程序所操作的数据都必须存储到某个地方,这个地方就是机器的内存,也称为主内存,或者叫做随机访问存储器RAM RAM是易失性存储器,在程序执行完毕后或者关闭计算机后,内容就会丢失,如果要是想在程序执行后将任何数据存储,都应该写入到磁盘中 变量 变量是计算机里一块特定的内存,它是又一个或多个连续的字节所组成,一般式1.2.4.8或16个字节 变量可以用一个名称表示内存的位置,已提取它包含的数据或存储一个新数值 <!-- lang: cpp --> int

    编程语言, c语言March 16

  • C语言自学 ---- 初探C语言

    初步了解C语言 C语言 C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务等等 C语言标准 C语言由一个国际标准定义,目前最新的标准为C11,由于C11标准定义的一些语言元素是可选的,所以有些编译器并没有实现该标准的全部功能,C11标准英文说明文档 C语言标准库 标准库定义了编写C程序时常常需要的常量.符号和函数,还提供了大多程序员可都可能需要的功能,例如字符串处理或数字计算等等,还提供了基本C语言的一些可选扩展 头文件 头文件指定了C标准库在一系列标准文件,例

    编程语言, c语言March 15

  • indent-C语言代码格式化工具

    indent可以让C代码格式化,更方便阅读 安装 indent for Windows下载地址http://gnuwin32.sourceforge.net/packages/indent.htm 找到Download下载Complete package,然后安装 indent for Linux下载地址http://www.gnu.org/prep/ftp.html 在亚洲区中国有几个镜像,点进去找到indent然后下载最新版本.tar.gz tar zxvf indent.tar.gz cd

    indent, 跨平台, c语言, 格式化工具February 21

  • C语言之格式化输出

    符号 作用 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法 说明: (1). 可以在"%"和字母之间插进数字表示最大场宽 例如: %3d 表示输出3位整型数, 不够3位右对齐. %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,小数点占一位, 不够9位右对齐. %8s 表示输出8个字

    printf, fprintf, sprintf, c语言, 格式化输出January 30

  • C语言之内存分配

    1 .堆和栈的区别 1.1.预备知识 1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区/静态区(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.程序结束后有系统释放. 4.文字常

    指针, 数组, c语言, 内存, , January 29

  • C语言之编译过程

    编译的概念 编译程序读取源程序(字符流),对之进行 词法 和 语法 的分析,将 高级语言指令 转换为功能等效的 汇编代码 ,再由汇编程序转换为 机器语言 ,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. 编译的完整过程 C 源程序 -- > 编译预处理 (.c) --> 编译.优化程序( .s ) -- > 汇编程序 (.o) --> 链接程序( .exe等 ) 1. 编译预处理 读取C源程序,对其中的 伪指令 (以 # 开头的指令)和特殊符号进行处理. (1)宏定义指

    汇编, 优化, c语言, 编译, 链接, 宏定义, 预编译, 条件编译, 动态链接, 静态链接January 29

  • C语言之概述介绍

    C语言的定义 C 语言是一种计算机程序设计 语言 .它既有高级语言的特点,又具有 汇编 语言的特点.它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序.因此,它的应用范围广泛. C 语言对 操作系统 和系统使用程序以及需要对硬件进行操作的场合,用 C 语言明显优于其它解释型高级语言,有一些大型应用软件也是用 C 语言编写的. C 语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件, 三维 , 二维 图形和动画.它是

    c语言January 29

  • 你试过这样写C程序吗?

    摘要 面向对象风格和函数式编程风格是编写代码的两种风格,面向对象风格早为大众所认知,函数式风格也渐渐受到大家的关注.网上为其布道的文章不少,有人赞扬有人不屑,但鲜有展示一个完整例子的.例如很多人对函数式风格的印象只是"有人说它很好,但不清楚到底好在哪儿,更不知如何在实际的项目中获益". 本文将采用C语言解决一个问题,围绕这个问题不断地变化需求.重构代码,分别展示两种风格如何从不同的侧面提高代码的可维护性.如果你没有耐心读完这篇长文章,可以参见:[附录II]直接看代码,但这篇文章会向你解

    c语言, 函数式编程, 面向对象编程, 结构化编程December 28

  • C语言中的EOF

    测试字符数 #include"stdio.h" main() { int c; long n = 0; c = getchar(); while(c != EOF) { ++n; c = getchar(); } printf("%ld\n", n); getch(); } 两点: 如果将getchar()拿到循环外面,那么在循环里面一定要在写一遍 EOF不是手动输入的EOF为结束,而是:windows下ctrl+z linux下 ctrl+d Linux中,在新的

    c语言, EOFDecember 13

  • 数据类型强制转换引发的一些意想不到的错误
    数据类型强制转换引发的一些意想不到的错误

    案例一:下面的代码是求一个数组中所有元素的和,其中元素的数量由参数length给出 给大家一个问题来思考: 这个函数实现的漏洞在哪? 为什么会有这个漏洞? 如何修改? 案例二:下面的代码使用 strlen函数来判断两个字符串的大小: 同样的问题思考案例二. 对于有经验的程序员来讲,这两个问题可能都不难回答,但是对于经验不足的程序员来说,发现这个bug就比较难了. a.对于第一个问题当调用的时候, length的大小为0的时候 length-1=0xffffffff,因为length是无符号的,所

    c语言, bug, 数制类型转换December 5

  • C 语言实现迷宫 DFS算法
    C 语言实现迷宫 DFS算法

    上周学校布置的数据结构教学作业是生成一个迷宫,并且判断是否有通路,于是我索性做了一个迷宫游戏,第一次写这样长的代码,没有组织好,可能在可读性上不是很好,另外应该可以改进很多地方,比如说goto语句的替换,实现DFS时比较早,用了较多的goto,后来就限制使用了,总之这个程序里还是学到了很多,有可以改进的地方,欢迎大家留言批评指正. 先上一个图 后面俩行提示是对齐的,这个截图是较早时搞的,代码里改过了,就是俩个空格的问题,起点是雌性图标,终点是雄性图表. 再看另外一个风格: 这些都是在搜狗输入法特

    dfs, 数据结构, c语言, 迷宫, 深度优先搜索November 28

  • 内存对齐问题
    内存对齐问题

    参考: C语言字节对齐 #pragma pack(n) 的作用 <C语言深度剖析> 1.问题 先看以下代码 #include <stdio.h> typedef struct tt { char c; short s; char c2; int i; } test_t; typedef struct { char c; char c2; short s; int i; } test_t2; int main() { test_t t; printf("%u\n"

    struct, c语言, 内存对齐November 27

  • 编程判断大端和小端
    编程判断大端和小端

    以下内容参考自<C语言尝试剖析> 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中. 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中. 假设int类型占4个字节,int类型的变量i被初始化为1. 以大端模式存储,其内存布局如下图: 以小端模式存储,其内存布局如下图: union { int i; char a[4]; } u; int is_big_endian() { u.a[0] = 1

    c语言, 内存, 大端, 小端November 26

  • 视频专辑:C语言程序设计视频教程(曾怡)

    专辑:C语言程序设计视频教程(曾怡) 简介:C语言程序设计视频教程(曾怡),非常好的C语言视频教程,从入门到精通 1 [C语言程序设计视频教程(曾怡)].01 2013-10-24 12:22 | 播放(18) | 评论(0) | 时长:1:00:50 2 [C语言程序设计视频教程(曾怡)].02 2013-10-24 12:22 | 播放(11) | 评论(0) | 时长:1:00:07 3 [C语言程序设计视频教程(曾怡)].03 2013-10-24 12:22 | 播放(11) | 评论

    c语言November 17

  • 视频专辑:零基础学习C语言

    专辑:零基础学习C语言 简介:零基础学习C语言 1 1. 概述以及如何上机运行C 新版 [C语言] 2013-11-01 19:30 | 播放(4) | 评论(0) | 时长:25:27 2 2. 数据类型,运算符和表达式01 [C语言] 2013-11-01 19:30 | 播放(3) | 评论(0) | 时长:20:50 3 3. 数据类型,运算符和表达式02 [C语言] 2013-11-01 19:30 | 播放(4) | 评论(0) | 时长:25:28 4 4. 数据类型,运算符和表达

    c语言November 17

  • [linux下c语言服务器开发系列6]客户端_多进程_压力测试

    上篇博客写了一个聊天室的服务器.只能用telnet来测试是否好用.于是,写了一个客户端来进行压力测试.看看服务器能给多少client服务. 客户端的主要作用是,fork多个进程,给服务器随机发送文本内容,服务器收到客户端的内容后,转发给其他所有的客户端. 测试了一下,客户端开1000个进程,与服务器段进行交互,发现只有400个进程有发送和回复的内容,其余的进程都没有.目前还不知道原因.貌似是服务器过载了? 下面是这个客户端的部分代码: 创建指定数量的进程,每个进程都调用runchild()函数来

    linux, c语言, 多进程, 网络编程, 压力测试, 复用, 服务器编程November 3

  • [linux下c语言服务器开发系列4]IO复用[select and epoll函数的使用]

    前言 服务器的重要作用是对多种外部事件或者请求作出反应.对于多个外部请求,可以通过多进程进行处理,即每来一个连接,我就fork一个子进程,用这个子进程专门针对这个请求进行处理,包括读写操作,与其他进程通讯,有数据库打交道等.这种方式是多个进程并行进行处理.但是,并行的程序,由于需要fork子进程,进行进程管理.进程切换等,需要耗费较多的资源,是否有串行的方式解决这个问题呢?有,那就是IO复用.IO复用是把所有需要进行处理的IO的读写注册成事件,如果哪个IO可以读写了,就触发相应的事件,通过复用函

    linux, c语言, 网络编程, 服务器编程October 23

  • [linux下c语言服务器开发系列3]进程间通讯

    上个博文说道,信号是在进程间通讯的的一种方式.例如子进程执行结束后,向父进程发送sigchld信号,父进程就通过捕获这个信号,就可以对子进程的资源进行回收,避免其成为僵尸进程. 进程间通信的另外一种方式是管道,主要是在父子进程间.父进程通过创立一个管道,fork()出子进程后,子进程继承父进程的管道,从而,父子进程就形成了管道的两端,从而可以靠这两端,进行父子进程之间的通信. 创建管道 创建管道的方法主要有两种,一种是pipe函数,可以man一下,解释很清晰的:另外一种是socketpair函数

    linux, c语言, 网络编程, 服务器编程October 23

  • [linux下c语言服务器开发系列2]多进程回射服务器带信号处理

    上篇文章提供了一个服务器可以多进程的处理客户端的请求的例子.但上个例子存在不少问题,比如业务逻辑处理部分特别杂乱,父进程没有对子进程的资源进行回收导致僵尸进程的存在.这些问题,均在本篇文章的例子中得到了解决. 对于业务处理部分的逻辑杂乱问题,我提供了一个dowork()函数,里面封装了所有的用户逻辑,即如果你想实现成一个回射服务器,就在这个函数中写你的需求就行,如果想实现成http.ftp等协议,也是在这个函数里写.这样,这个函数就比较具有通用性了.当然了,如果想实现功能复杂的服务器,不可能只靠

    linux, c语言, 网络编程, 服务器编程October 18

  • [linux下c语言服务器开发系列1]多进程处理多客户端的连接

    在上文中,提供了一个十分简单的回射服务器的demo,但是,这个demo的作用十分有限,只能接收一个客户端的连接,然后和其建立联系,进行通讯.等这个客户端断开连接后,才能处理另外的连接.功能太弱了.因为我们之前学过多进程程序设计,所以,这里提供一个回射服务器的多进程版本,使之能够同时处理多个客户端的连接. 多进程主要是靠fork函数来完成的,他是一个特殊函数,一次调用,两次返回.如果返回大于0,表示是父进程,同时返回值表示了他的子进程的pid.返回值如果等于0,表示他是一个子进程.子进程是父进程的

    linux, c语言, 多进程, 网络编程, 服务器编程October 17

  • [linux下c语言服务器开发系列] 开篇(socket的基本操作)

    对于linux下c语言的编程,尤其是网络编程这部分,还是有一些莫名的爱好的.学习了一些东西,如果不加以总结和实际操作,往往容易忘了.所以,在此写个系列的博客,记录一下,从零开始写linux下的服务器编程.希望看到这篇日志的同学,多提意见,共同学习. 对于网络编程,主要是对socket和IO进行操作.为了实现高效通讯,需要一些策略,后面会介绍到.作为开篇,主要是对socket的基础操作的讲解. socket本质上就是一个int的数字,文件描述符,用于标识主机间端到端的通讯.两端的主机,通过对该so

    linux, c语言, 网络编程, 服务器编程October 17

  • 关于c语言等于运算符的一点思考
    关于c语言等于运算符的一点思考

    前言 前些天发表了一篇博文关于c语言内存地址对齐的一点思考,引起了大家比较热烈的讨论,的确在这篇文章中示例的选择不是很恰当,示例有很多不严谨的地方,博客的评论中得到了很多同学的指点.也有很多同学指出这种做法技巧性太强,不适合在项目开发中使用,的确是这样,没有深厚的功底尤其是对gcc编译器的深度理解,是比较容易出错. 不过写作该篇文章是为了向大家介绍利用内存对齐的特性来存储一些信息,如果大家今后在别人的代码中看到这种用法,不至于一头雾水,至少记得在osc以前某个时刻某人曾经介绍过这种用法,达到这个

    gcc, c语言, 运算符October 13

  • [原创]堆排序 C语言实现
    [原创]堆排序 C语言实现

    代码写了注释,最大长度可以更改,需要的话,可以传参加入指针,将临时变量打包成结构体,组织成可重入函数 测试通过 参考资料:维基百科 堆排序 //堆排序的实现,自己理解使用...有一些偷懒 #include <stdio.h> #include <stdint.h> #define MAX_LEN 17 //从0开始索引 uint32_t arr[MAX_LEN] = { 50,40,70,80, 60,30,20,100, 90,10,120,130, 150,180,190,16

    算法, c语言, 堆排序October 6

  • C语言打印圣诞树
    C语言打印圣诞树

    正在学习C基础,书上有练习题就做了下,做下记录. 来张图先: 源码: #include<stdio.h> int main() { int rows,starNo,spaceNo; printf("Enter Rows:\n"); rep: scanf("%d",&rows); if(rows==0) return 0; for(int i=1;i<=rows;i++) { starNo=i*2-1; spaceNo=i+rows-star

    c语言, C语言打印圣诞树, C语言编程基础September 25

  • C语言四种变量值交换方法

    int temp,a,b; 1. temp=a;a=b;b=temp; 2. a=a^b;b=a^b;a=a^b; 3. a=a+b;//获得和 b=a-b;//和中去除b的值 a=a-b;//和中去除a的值 4. a=a+b-(b=a);

    c语言, 变量值交换September 22