当前位置: 首页 > C
  • 探秘 stdio.h 设计与思考

    探秘 stdio.h 设计与思考

    前言 stdio.h   是我们经常使用的一个标准库。基本上现在的C编辑器都自动会在C文件中添加这个头文件。这一篇博客主要就是来了解这个库的前世今生。 ——star  stdio.h是什么? 这个头文件声明了很多的输入输出函数。当然几乎所有的用户级别程序都需要输入输出,事实上这也是C标准库出现的最早的头文件之一。并且它也是包 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 探秘C stddef.h

    探秘C  stddef.h

    stddef.h 这个头文件里变包含的就是C 的标准定义。C标准委员会认为即使再一个独立的环境中,C语言也应当有它的用途,独立环境是一个由于种种原因而不能支持完整C标准库的环境。对于这样的实现只需要实现4个C语言的头文件就可以了,分别是:<float.h>   <limits.h>   <stdarg.h>  <stddef.h>.它 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 探秘C stdarg.h 实现自己的printf( )

    探秘C stdarg.h 实现自己的printf( )

    前言 最近一直再看C标准库的东西,今天看到了<stdarg.h> . __START C语言由一个非常强大的功能,就是它允许定义可接受一个可变参数列表的函数。 尽管C为了这个可变参数也一直在修改着自身的东西,现在基本稳定,现阶段主要是有一下一些宏来确定这些东西。 va_start  : 一个函数必须至少声明一个固定的参数。这个 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 探秘C-signal信号

    探秘C-signal信号

    探秘C程序中的信号 简单的不多说,也就不进行简单的介绍了。 可移植性: 首先对于<signal.h>中声明的函数不能完全的安全的定义一种可移植的用法,原则上,可以为一个只有raise报告的信号指定一个处理程序,但是很难想象它的那些方面比<setjmp.h>中的跳转函数做得更好,同时也不能保证一个指定的信号在C语言 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 探秘C函数栈帧—实现自己的setjmp/longjmp

    探秘C函数栈帧—实现自己的setjmp/longjmp

    前言 最近再看《C标准库》看到了setjmp和longjmp函数这里,所以就打算好好学习下C的函数栈帧。 __start 在标准C库中,它是通过汇编语言完成的,但是我们这里为了研究原理,所以用C 语言来完成这个库函数。 #include<stdio.h> #include<string.h> #define _JBFP 1 #define _JBMOV 60 #define _JBOFF 4 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 探秘assert,h—(已放弃,核心已转储)

    探秘assert,h—(已放弃,核心已转储)

    深度探秘assert—(已放弃,核心已转储) 前言 前边一直再看内核的slab缓存,真是累如狗,但是它的体系是在是太复杂了,看来需要进一步总结,在这个过程中经常看到assert 断言这个东西,所以今天轻松一下,看看这个的底层实现。 __start 我使用的是glibc-2.18 还是挺新的,首先看一个例子,如果之前接触过C 的同学 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • [转]malloc 实现二维数组

    [转]malloc 实现二维数组

    #include <malloc.h> #include <stdio.h> int main() { int **a = malloc(sizeof(int)*3); a[0]= malloc(sizeof(int)*2); a[1]= malloc(sizeof(int)*2); a[2]= malloc(sizeof(int)*2); a[0][0] =1; a[0][1] =2; a[1][0] = ...

    阅读全文
    作者:root | 分类:C, C/C++
  • [原]动态链接详解

    [原]动态链接详解

                                                                                    动态链接  动态链接的诞生:   动态链接产生最主要的原因就是静态链接空间浪费过于巨大,更重要的是现阶段各种软件都是模块化开发,不同模块都是由不同厂商开发的,一旦一个模块发生改变,整个软件就需要重新编译(静态链接的 ...

    阅读全文
    作者:root | 分类:C, C/C++
  • 可执行文件的装载与进程

    可执行文件的装载与进程

                                                                                               可执行文件的装载与进程 1。进程虚拟地址空间 每个进程运行起来以后,都将有一个自己的虚拟地址空间,其实这还是计算机制造出来的假象,让进程误以为此时只有它自己在运行,所有内存都只有他自己在使用,一般来说, ...

    阅读全文
    作者:root | 分类:C, C/C++
  • readline( )库的安装和使用,实现命令补全

    readline( )库的安装和使用,实现命令补全

    之前自己实现一个简单shell 的时候,想要实现命令行自动补全功能,于是上网查了查资料,发现多数都提到了 readline( ) 库,经过仔了解后,发现其实bash 的底层实现也是调用了这个库,我的系统是 fedora 21 并没有安装这个库,且man page 中也没有相关信息,(Q:bash 调用的谁呢?)不管那末多,先无脑安转吧,边安转 ...

    阅读全文
    作者:root | 分类:C, C/C++