【Linux C】
林知共创
【林知共创】记录和分享个人好文
展开
-
【Linux C】offsetof与container_of宏
offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址;offsetof宏 使用offsetof宏需要包含stddef.h头文件,实例可以参考:http://www.cplusplus.com/reference/cstddef/offsetof/。 offsetof宏的定义如下:#define offseto...原创 2019-01-02 21:08:13 · 749 阅读 · 0 评论 -
【Linux内核】数据结构之环形双链表
链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数据元素(常称为节点)的数据结构。链表可以动态创建并插入,编译时无须知道具体需要创建多少个元素,每一个元素的创建时间可以不同,也无须占用连续内存区。链表包含:单向链表、双向双链表、环形单向链表、环形双向双链表因为环形双向链表提供了最大的灵活性,所以Linux内核的标准链表就是采用环形双向链表形式实现的。链表数据...原创 2019-01-03 15:03:56 · 1002 阅读 · 0 评论 -
Linux下C语言开发(多任务编程之任务、进程、线程)
多任务的概念人们已经非常熟悉了,它是指用户可以在同一时间内运行多个应用程序。Linux就是一种支持多任务的操作系统,它支持多进程、多线程等多任务处理和任务之间的多种通信机制。Linux下多任务机制的介绍多任务处理是指用户在同一时间内运行多个应用程序,每个应用程序被称做一个任务。Linux就是一个支持多任务的操作系统,它比单任务系统的功能增强了许多。当多任务操作系统使用某种任务调度策略允许两原创 2014-12-12 09:56:39 · 10062 阅读 · 2 评论 -
Linux下C语言开发(信号signal处理机制)
信号signal处理是Linux程序的一个特色,用信号处理来模拟操作系统的中断功能,对于系统程序员来说是最好的一个选择了。同样信号处理也是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称软中断。从它的命名可以看出,它的实质和使用很像中断,所有,信号可以说是进程控制的一部分。原创 2014-12-09 15:26:30 · 24931 阅读 · 2 评论 -
Linux下C语言开发(已知进程名得到其PID号)
在我的另外一个篇博客【Linux下C语言开发(信号signal处理机制)】中需要测试系统调用kill来向指定进行号发送指定的信号,在同一个测试文件很容易获取当前进程的pid,只需调用getpid()函数就可获取当前进程的pid。但是,如果要获取非当前进程的pid,那应该如何获取呢?即我们需要在Linux C 程序中,已知其他进程的名字,来获取其进程的pid。此时此刻我只能百度了,上网百度,找到两种1、通过popen创建一个管道,执行shell命令并得到返回结果2、通过搜素/proc文件夹下的文件内容,得原创 2014-12-09 17:50:13 · 11245 阅读 · 1 评论 -
Linux下C语言开发(gdb调试)
我们程序猿在开发代码的时候,可能编写代码占整个开发过程的百分之十不到,打不时间是在调试。调试很容易帮我们找到程序bug,特别是单步调试,单步调试让我们知道程序是如何行走的。在windows下面,我们有visual studio工具,而在Linux下面,实际上除了gdb工具之外,没有别的选择了。那么,怎么用gdb进行调试呢?我们可以一步一步来调试VMware配置Ubuntu系统可以查看我的另原创 2014-12-08 13:45:24 · 4753 阅读 · 0 评论 -
Linux下C语言开发(Makefile编写)
对于程序员设计来说,Makefile是我们绕不过的一个坎。以前习惯利用VC 6.0开发工具来开发C代码和C++代码,此时我们不需要编写Makefile文件,即会不会编写Makefile无所谓,因为VC 6.0开发工具已经帮我们做好了全部的编译过程。但是在Linux上面,一切变得不一样了,没有人帮我们做好这一切。编写代码要靠我们,测试也得靠我们,最后自动化编译设计也要靠我们。想想看,如果我们下载一个原创 2014-12-08 11:56:59 · 2995 阅读 · 0 评论 -
Linux下C语言开发(开篇hello world.)
从大学选择走嵌入式方向到现在从事嵌入式驱动工程师职位已一年多了,要能胜任嵌入式驱动工程师(当然,这里我所说的嵌入式驱动工程师并非指驱动开发,往往只需要根据自己的系统移植驱动以及编写简单的驱动)确实需要不少知识,如:开发环境搭建、看懂简单硬件电路原理图、了解常用硬件工作原理、懂Linux C开发、Linux命令、MakeFile编写等等。以前这些知识点都是笼统地了解,从未认真地学习过,特别是Linu原创 2014-12-08 10:29:09 · 4053 阅读 · 0 评论 -
结构体(struct)的使用、内存分布以及字节对齐测试总结
最近和班上的一些"猿友"重新来完善或重新写以前在学校用C语言实现的数据结构,实现单链表、双向链表、循环链表、树、图等等一些数据结构。需要实现这些数据结构就必须熟练掌握C语言中的自定义类型,即结构体(struct)。虽然以前在学学校实现过,但是不是很完善,然而就当我重新动手用C来实现链表,却发现自己的C语言大部分知识点都忘得差不多。今天在这里总结和测试C语言中的结构体(struct),熟练掌握结构体原创 2014-12-19 10:38:05 · 10141 阅读 · 0 评论 -
Linux下C语言开发(进程控制编程——wait()、waitpid())
wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或该进程接收到一个指定的信号为止。如果该父进程没有子进程或它的子进程已经结束,则wait()就会立即返回。waitpid()的作用和wait()一样,但它并不一定要等待一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作用控制。实际上,wait()函数只是waitpid()函数的一个特例,在Linux内部实现wait()函数时直接调用的就是waitpid()函数。原创 2014-12-17 11:42:44 · 16214 阅读 · 6 评论 -
Linux下C语言开发(进程控制编程——fork()、exec函数族)
在Linux中创建一个新进程的唯一方法是使用fork()函数。fork()函数是Linux中一个非常重要的函数,和以往遇到的函数有一些区别,因为fork()函数看起来执行一次却返回两个值。原创 2014-12-15 15:00:19 · 9058 阅读 · 1 评论