
C语言基础
文章平均质量分 77
astrotycoon
这个作者很懒,什么都没留下…
展开
-
C语言之tentative definition
参考链接《What Are “Tentative” Symbols?》原创 2021-11-24 20:58:36 · 1666 阅读 · 0 评论 -
main函数之前发生了什么
未完待续原创 2020-06-26 23:30:10 · 422 阅读 · 2 评论 -
正确理解补码
参考链接:《Two’s Complement Representation: Theory and Examples》《Storing Integers: Unsigned and Two's Complement》《Why two’s complement works》《A Tutorial on Data Representation -- Integers, Floating...原创 2019-12-22 16:06:37 · 319 阅读 · 0 评论 -
C语言I/O缓冲
buffered I/O 和 unbuffered I/O我们可以简单的认为系统I/O调用是unbuffered I/O,而C语言标准库I/O函数(即stdio函数)是buffered I/O。但是需要注意的是:认为使用unbuffered I/O读写磁盘时没有使用缓冲是一个很大的错误认识,实际上,内核是通过高速缓存(kernel buffer cache)来进行实际的磁盘读写的。也就是说...原创 2015-04-11 10:47:20 · 2779 阅读 · 2 评论 -
学会使用getopt函数
简介getopt函数是命令行参数解析函数,在平时阅读源码的时候经常遇到,很有必要对其总结一下,做个记录!命令行参数各组成部分的名称先来了解下命令行参数各组成部分的名称。直接上图:非常清楚,命令行参数由Command name,Option,Option argument以及Operands组成。Command name不用多说,就是程序的名称。操作对象Operands又...原创 2015-05-27 15:26:12 · 6385 阅读 · 2 评论 -
sys/queue.h分析
这两天有兴趣学习使用了下系统头文件sys/queue.h中的链表/队列的实现,感觉实现的很是优美,关键是以后再也不需要自己实现这些基本的数据结构了,哈哈!我的系统环境是正好需要使用队列,那么本篇就以其中的尾队列(tail queue)为例,结合实际的测试程序和示意图(亿图软件)来说明。测试程序tailq.c如下:#include <stdio.h> #include <std...原创 2015-01-20 14:23:21 · 11759 阅读 · 3 评论 -
main函数之前发生了什么
参考链接:《Linux x86 Program Start Up》《The thorny path of Hello World》《Before Main()》(需梯子)《Life Cycle of a Linux Program | Glenn's Web Site》《main 之前与之后》《《程序员的自我修养》第十一章读书笔记》《How main() is exec...原创 2017-03-09 11:27:04 · 875 阅读 · 0 评论 -
一段自己打印自己的C程序
今天发现了一段很有意思的C程序(http://blog.chinaunix.net/uid-233938-id-162628.html),实现的功能就是自己打印自已的内容。这其中的道理其实是在程序链接阶段做了手脚!先看程序如下:#include <stdio.h>#include <stdlib.h>extern char * _binary_test_...原创 2013-08-11 16:19:21 · 2506 阅读 · 0 评论 -
glibc函数exit源码分析
exit(3)函数源码分析!原创 2017-03-10 14:23:40 · 1376 阅读 · 0 评论 -
ELF总览
开始之前之所以打算深入学习ELF文件格式,根本原因是在研读《程序员的自我修养》这本书时受到了启发。想必很多人跟我一样,在学习编程的起始阶段,很多知识都是书本或者是网络直接获取来的,可惜大多时候这些知识有些让人摸不着头脑,究其原因是因为我们没有实实在在地看到它们的存在。同样的,编程过程中遇到的很多问题,也有相当一部分是对编译链接的知识欠缺导致的。那么学习ELF文件格式有什么好处呢? 最明显的...原创 2014-12-20 15:23:34 · 1370 阅读 · 0 评论 -
为什么在C语言中函数的声明很重要
写在前面想起来写这篇文章,是因为前不久在知乎上看到一篇关于C语言的文章《C语言真的需要头文件吗》。 《Importance of function prototype in C》《C Functions Without Arguments》《What is the purpose of a function prototype?》《Calling a C Function ...原创 2016-03-06 16:23:50 · 2671 阅读 · 0 评论 -
了解glibc的Name Service Switch
了解glibc中的Name Service Switch原创 2017-09-30 18:07:04 · 1251 阅读 · 0 评论 -
glibc--memcpy源码分析
以下是glibc-2.10.1中memcpy函数的源码#include #include #include #undef memcpyvoid *memcpy (dstpp, srcpp, len) void *dstpp; const void *srcpp; size_t len;{ unsigned long in原创 2012-10-25 12:13:59 · 12965 阅读 · 6 评论 -
Position Independent Code (PIC) in shared libraries
很好的文章,阐述x86上得位置无关代码的实现,翻译的不好,还望批评指正。免费PDF文档下载地址:http://ishare.iask.sina.com.cn/f/35290470.html或者http://wenku.baidu.com/view/506fe43a31126edb6f1a106a.html?st=1I’ve described the need for special原创 2012-12-31 23:15:27 · 4249 阅读 · 0 评论 -
小谈链接选项-Bsymbolic
未完待续!参考链接:《记一个链接库导出函数被覆盖的问题》原创 2017-06-13 16:27:47 · 4290 阅读 · 0 评论 -
Load-time relocation of shared libraries
一篇关于装载时重定位技术的文章,翻译的不好,还望批评指正!免费PDF文档下载地址:http://ishare.iask.sina.com.cn/f/35236483.html 或者: http://wenku.baidu.com/view/d67a3108a6c30c2259019e6a.html翻译 2012-12-26 16:03:20 · 2469 阅读 · 0 评论 -
X86和X86-64的函数栈帧结构以及调用约定
写在前头对于函数栈帧(stack frame)的概念我是早就知道的,对x86的栈帧结构也算的上熟悉,之所以写这篇文章是因为我发现X64平台函数参数传递与X86有很大不同,X64增加了很多寄存器的使用。索性总结一下,供自己以后查阅学习!如有错误的地方,还请读者指出!写这篇文章主要参考了Eli Bendersky的两篇文章,个人非常喜欢他的文章,总能用探索式的博文将技术细节呈现在我的眼前!...原创 2017-01-19 18:57:21 · 2871 阅读 · 0 评论 -
链接时重定位
未完待续!原创 2017-06-04 15:52:15 · 607 阅读 · 0 评论 -
Linux下利用ioctl函数获取网卡信息
linux下的ioctl函数原型如下:#include int ioctl(int handle, int cmd, [int *argc, int argv])函数成功返回0,失败返回-1.其相关命令接口如下:类别Request说明数据类型套接口SIOCAT转载 2013-10-31 11:37:39 · 8828 阅读 · 0 评论 -
Life Cycle of a Linux Program
Life Cycle of a Linux Program 一个程序的生与死(linux平台)This is an investigation of the life cycle of a program in a Linux system.本篇文章我将讨论的是一个程序在...翻译 2017-11-30 10:54:20 · 738 阅读 · 0 评论 -
深入理解linux系统调用
参考链接:《Linux 系统调用》《glibc源码分析(一)系统调用》《System Calls Make the World Go Round》《syscall wrapper in glibc》《Tutorial - Write a System Call》《How to wrap a system call (libc function) in Linux》《Th原创 2018-01-22 09:37:33 · 515 阅读 · 0 评论 -
C语言基本概念之左值
关于“左值”的困惑我相信接触过C语言的人都听过"左值"这个概念,不过到底什么是左值呢?其实能说清楚的人其实并不多,这其中就包括很多使用C语言多年的所谓老鸟。我听的最多的解释是:“左值就是可以出现在赋值运算符左边的东西”。根据这个定义,我提出我的几个疑惑:(1)那么我们看如下代码片段:int x, y;x = 100;y = x;这里变量x既可以出现在赋值运算符的左...原创 2019-06-02 21:08:09 · 2938 阅读 · 0 评论 -
头文件中的static inline函数
参考链接:《static_inline_example》原创 2018-05-14 15:38:17 · 1636 阅读 · 0 评论 -
ELF符号可见性(Visibility)
参考链接:《Proper C++ Visibility Support》《Controlling Symbol Visibility》《Why symbol visibility is good》《Introduction to symbol visibility》《Control over symbol exports in GCC》《Sorry state of dyn...原创 2018-05-18 19:46:53 · 1058 阅读 · 0 评论 -
C语言基本概念之序列点
为什么写这篇文章?我相信很多人跟我一样,在使用了C语言很长一段时间之后,都不曾知道C中有个序列点(sequence point)的概念。最近翻阅C标准时发现它是个非常重要的概念,理解了它对于消除对C的诸多疑惑大有裨益,也更能提高代码质量。什么是副作用?副作用?什么副作用?我相信很多人一脸懵逼,还以为是吃了什么药产生了什么副作用。那么我现在确确切切地告诉你,副作用(side effect)是C中的一...原创 2016-03-27 09:57:35 · 2014 阅读 · 0 评论 -
C语言基本概念之表达式
什么是表达式(表达式的定义)?表达式是C语言的重要语法成分,不过对于表达式的定义,好像从来没有人关注过。今天就孔乙己一把吧,哈哈。先贴标准对expression的定义(ISO/IEC 9899:2011 6.5):An expression is a sequence of operators and operands that specifies computation of a val...原创 2016-03-11 16:47:36 · 53713 阅读 · 8 评论 -
浅谈C语言之序列点
在明白序列点之前,需要了解什么是副作用。原创 2018-01-31 20:01:32 · 813 阅读 · 0 评论 -
字符集和字符编码以及相关
为什么写本文其实在我心中是一直知道有字符编码这么个概念存在的,只是从来没有遇到过关于它的相关问题,因此也就没有好好去了解它的动力。既然有这篇博文的存在,证明肯定是遇到字符编码的问题了。事情是这样的,最近公司的产品需要支持短信功能,但是如果想要短信内容支持中文的话,通信模块规定必须使用UCS2字符编码方式,而程序用的是UTF-8字符编码方式,那么就需要将UTF-8字符编码转换成UCS2字符编...原创 2018-02-08 10:58:08 · 1749 阅读 · 1 评论 -
捕捉信号SIGSEGV并回溯栈帧
引出问题在嵌入式应用程序开发过程中,调试一直是个老大难问题 -- 由于环境的限制,当程序发生段错误时不能很好的定位到底是哪里出现了错误,如果在程序发生段错误时能够清晰明了地看到程序的栈帧链,那无疑是雪中送炭。本文就捕捉信号SIGSEGV并在该信号的处理函数中打印出函数栈帧链来帮助我们调试程序。本文的程序适合ARM和X86平台。回溯栈帧原理理解函数栈帧的布局后,那么自然明白回溯栈帧的原理了,这里不多...原创 2015-04-27 20:43:21 · 8002 阅读 · 8 评论 -
A Guide to Undefined Behavior in C and C++, Part 3
https://blog.regehr.org/archives/232翻译 2018-02-08 20:41:34 · 310 阅读 · 0 评论 -
A Guide to Undefined Behavior in C and C++, Part 2
https://blog.regehr.org/archives/226翻译 2018-02-08 20:41:08 · 285 阅读 · 0 评论 -
A Guide to Undefined Behavior in C and C++, Part 1
https://blog.regehr.org/archives/213翻译 2018-02-08 20:40:34 · 318 阅读 · 0 评论 -
linux进程间通信概述
为什么需要进程间通信在学习一个新的知识之前,了解它为什么存在是非常重要的,这样就可以很有目的性的学习,并且学后不容易遗忘。那第一个问题就是为什么需要进程间通信呢?原因如下:我们知道,进程是系统中独立的一个资源分配单位,不同进程之间的资源是相互独立,没有关联的,因此不能在一个进程中直接访问另一个进程中的资源(共享内存除外)。这样就可以解释为什么全局变量不能用于父子进程间的通信了,因为原创 2015-03-03 09:41:46 · 683 阅读 · 0 评论 -
关于SIGHUP信号的讨论
参考链接:《Linux终端关闭后台进程也结束原因分析和nohup的使用》《理解SIGHUP产生的过程》《Linux shell 退出后任务仍然运行引发的探究》《解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】》《Linux运行与控制后台进程的方法:nohup, setsid, &, disown, screen》《后台进程退出时,关...原创 2018-01-22 09:36:20 · 642 阅读 · 0 评论 -
C/C++标识符的作用域(scope)小结
对比C和C++中标识符作用域的相同和不同点!原创 2017-04-06 15:01:01 · 5334 阅读 · 0 评论 -
C语言标识符的属性
C语言标识符 什么是C语言的存储类(storage class)总的可以这样概括下:在C中storage class描述的是变量或者函数的作用域(scope),它们的可见性(或者叫链接属性,linkage),以及它们的生存期(lifetime,生存期由storage duration决定)。直白点来说,由storage class我们可以知道变量存储在哪里;如果没有给变量赋初值,那...原创 2014-11-24 20:33:32 · 2517 阅读 · 0 评论 -
C语言中的强符号与弱符号
一、概述在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。对于它们,下列三条规则使用:① 同名的强符号只能有一个,否则编译器报"重复定义"错误。② 允许一个强符号和多个弱符号,但定义会选择强符号的。③ 当有多个弱符号相同时,链接器选择最先出现那个,也就是与链接顺序有关。二、哪些符号是弱符号?我们经常在编程中碰到一种情况叫...原创 2012-09-22 23:31:02 · 43784 阅读 · 21 评论 -
linux进程间通信之共享内存
未完待续!原创 2015-03-03 09:44:04 · 809 阅读 · 0 评论 -
linux进程间通信之信号量
未完待续!原创 2015-03-03 09:44:01 · 569 阅读 · 0 评论 -
linux进程间通信之消息队列
未完待续!原创 2015-03-03 09:43:07 · 520 阅读 · 0 评论