![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux C 入门
文章平均质量分 79
本专栏分享linux C 入门知识和常见问题,希望能帮助康入行的朋友
谢艺华
主要深耕于 linux 后端开发,热衷于体系能力(包括不限于C、C++、linux、编译原理、数据结构和算法、网络、操作系统
)的沉淀,分享工作中重要的知识点和具有代表性的案例分析。
欢迎志同道合的朋友与我一起前进
展开
-
数据落盘机制
我们知道想要将数据安全的写到磁盘,并不是一件容易的事情。他可能停留在用户层的缓冲区,也有可能停留在内核的缓冲区。因此,我们在编程中要有主动同步数据的良好习惯。原创 2020-09-12 11:03:58 · 6351 阅读 · 2 评论 -
flaot 数据类型的一些坑(大数吃小数)
首先我们来看一段代码,你认为它会输出什么呢?解析:逻辑上就是将1.0进行累加2千万次。我们预计的结果应该是20000000。但是结果却如图:毫无疑问,这肯定和float数据类型有关,但是至于为什么会出现这个问题,我们一起来分析。原创 2020-05-15 15:33:51 · 8791 阅读 · 5 评论 -
如何设计数据库表?
本章的主要目的就是想让大家了解数据库设计时需要注意的点。想要设计出一个优秀的数据库还需要更多的努力,在后面的学习中,如有相关的经验或总结,我会继续补充。即使我们现在还不是大牛,但是在工作中,如果让我们设计数据库,起码已经知道评判的方式,最起码要建立一个满足3NF的数据表。原创 2020-04-16 15:04:10 · 4617 阅读 · 2 评论 -
linux内核设计与实现--链表的启发
最近在抽空看《linux 内核设计与实现》这本经典之作。看到了内核的数据结构一章,发现内核链表的实现确实很优秀。(因为我平时写应用代码也会涉及到链表的操作,相比较而言,就显得我很low,没有对比就没有伤害)。今天就总结一下自己的启发。原创 2019-08-08 11:01:49 · 164 阅读 · 1 评论 -
C语言中的整型提升问题分析
首先变量a整型提升的0x000000A5.取反之后得0xFFFFFF5A。整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;整型提升时如果是无符号数据则左边补0,如果是有符号数据则补符号位。但是它对于float类型的数据是不适用。但是该题没有限制数据的类型。这样写的缺点是不能避免数据的溢出,如果a+b的结果大于a所能表示的最大值。第二点,~的优先级最高,>>符的优先级最低。例:有两个数据,写出交换数据的宏。原创 2019-04-19 17:26:01 · 464 阅读 · 1 评论 -
linux根目录下各子目录的作用
我查了一晚上的资料,结果都不全,让我在各个网站,博客寻找了好久。现在就向大家分享我的资源(为了找齐,花费了宝宝好长间,喜欢的就点下赞哦,您的认同是我前进最大的动力)首先我们要知道根。:这个目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里。: 系统的管理命令,这里存放的是系统管理员使用的程序。: 某些大文件的溢出区,比如各种服务的日志文件。: 系统的设备文件,即设备的驱动程序。存放着可移除的设备,比如软盘,光盘。最大的目录,存放着应用程序和文件。: 储存着一些特殊的字符的定义。原创 2019-04-19 16:54:59 · 5587 阅读 · 1 评论 -
对于线程,你真的懂了吗?
背景上周在处理一个问题,涉及到了线程调度策略的问题。因为我们要求线程的属性默认为实时策略(SCHED_RR),但是通过proc文件系统查看,实际生效的是分时调度策略(SCHED_OTHER)。通过分析,发现是由于创建线程是设置的参数并不正确,导致的问题。也顺便复习和了解了一下线程创建属性的知识点。在这里做一个记录,当做是以后的复习知识点之一。我们知道创建线程的API为int pthread_...原创 2019-03-28 23:10:32 · 1017 阅读 · 1 评论 -
栈实现计算器
当遇到运算符时,如果他的优先级比运算符栈栈顶元素的优先级高就栈。反之,取出栈顶运算符和操作数栈顶的两个连续操作数运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶的运算符的优先级。左括号一律进运算符栈,右括号一律不进运算符栈,取出栈顶运算符和操作数栈顶的两个连续操作数运算,并将结果存入操作数栈,直到取出左括号为止。首先,要写出计算器,你要按照以下几点去写,才能保证运算的优先级不发生错误。如果有不足的地方,欢迎大家留言,帮助我改进。原创 2016-06-12 11:06:48 · 18525 阅读 · 10 评论 -
什么是幻数?
因为读者根本不知道16是什么意思,我相信即使是代码的编写者,你问他,他也需要联系上下文才能回答你这个问题。所以,这就是“幻数”。就是因为代码不是我们自己写的,所以我们不知道这个16是什么意思,这也暴露了一个问题,这段代码的。说到这里,我想大家应该都知道解决幻数的好处是什么了。因此我们写代码的时候,尽量避免幻数的出现。有很多种方式,比如枚举,宏替换都是解决幻数的有效方式。仅仅只是文字的表达,我相信恐怕有些朋友难以理解,那我就举个例子说明一下。我怎么可能知道,这代码又不是我写的,我怎么会知道他在想什么。原创 2016-06-03 13:50:27 · 10765 阅读 · 2 评论 -
C89标准、C99标准、C11标准的区别
用于指出__func__所存放的函数名,类似于字符串赋值。原创 2016-05-07 22:02:02 · 39685 阅读 · 1 评论 -
什么是库?(linux平台下的理解)
静态编译:静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。动态编译:动态编译的。原创 2016-04-19 09:43:23 · 1609 阅读 · 1 评论 -
C为什么会作为嵌入式开发的首选开发语言?
C语言概述(简答) 这篇文章是为了帮助我们在后期的学习中,能够很快的复习前面的内容,进行的笔记记录。 一.嵌入式开发为什么会选择C语言? 回答这个问题前,我们首先要先解决两个问题?第一,嵌入式开发需要考虑到哪些问题?第二,C语言相对于其它高级语言有什么特点? 第一,嵌入式的开发,需要考虑三个方面,1.性能。 2.安全原创 2016-04-24 17:34:24 · 336 阅读 · 1 评论 -
C关键字介绍大全
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。我们知道变量的值通常保存在内存中,cpu对变量进行读取显示将变量的值从内存中读取到寄存器中,然后进行运算,运算完将结果写到内存中。原创 2016-05-05 13:58:22 · 428 阅读 · 0 评论 -
什么是野指针?应该如何避免?
第一,当一个指针没有指向时,我们一般默认指向NULL。(NULL代表内存的0地址,并且NULL是不允许做任何操作的)请认真研究这样的表达式的优点,这个表达式在代码的维护性,扩展性都大大提高了。这方面是我们平时写代码时所应该提高的。我们在工作中,经常会遇到野指针引起的问题。终归到底,还是编码不规范导致的。的,因此我们只能避免野指针的出现,而不能杜绝。(请注意用词)我们在编程时,做到以下几点可以有效地避免野指针的出现。我相信只要大家在平时写代码是做到以上几点,是可以很好地避免野指针的出现。原创 2016-05-16 22:38:52 · 11220 阅读 · 2 评论