现在位置: 首页 > 自动控制 > 文章
2019-10-26 20:52 工业·编程 ⁄ 共 1541字 暂无评论
    在Linux内核源码中,实现和链表相关的接口list_entry()时,会调用container_of()宏定义,它的作用是:给定结构体中某个成员的地址、该结构体类型和该成员的名字,来获取这个成员所在的结构体变量的首地址。有点绕,没关系,接着往下看就能明白了。 container_of()宏定义实现如下所示 /** * container_of - cast a member of a structure out to the containing structure * * ...
阅读全文
本文讲解typeof( ((type *)0)->member )的含义,并在此基础上学习offset_of()的用法。 typeof( ((type *)0)->member ) ANSI C标准允许值为0的常量被强制转换成任何一种类型的指针,并且转换的结果是个NULL,因此((type *)0)的结果就是一个类型为type *的NULL指针. 如果利用这个NULL指针来访问type的成员当然是非法的,但typeof( ((type *)0)->member )是想取该成员的类型(有关typeof()的用法可参考这里),所以编译器...
阅读全文
2019-10-24 20:34 工业·编程 ⁄ 共 1571字 评论 2 条
typeof() 是GCC提供的一种特性,可参考C-Extensions,它可以取得变量的类型,或者表达式的类型。 本文总结了typeof()关键字的常见用法,并给出了相应的例子,以加深理解 。 typeof()关键字常见用法 1、不用知道函数返回什么类型,可以使用typeof()定义一个用于接收该函数返回值的变量 #include <stdio.h> #include <stdlib.h> #include <string.h> struct apple{     int weight;   ...
阅读全文
2019-10-23 20:30 工业·编程 ⁄ 共 810字 暂无评论
如果你对sizeof很熟悉的话,那么大可进行类推,sizeof(exp.)返回的是exp.的数据类型大小,那么typeof(exp.)返回的就是exp.的数据类型。值得注意的是在上面的话里我们可以看到,如果编译选项中指定了使用标准C,那么gcc的扩展使用可能会受到影响,不过在gcc编译条件下使用__typeof__依然可以正常工作,这和使用asm是一样的。当然如果是在其他的编译器条件下,这样做也不行了,只能自定义一个macro去使用,也就是说跟gcc没啥...
阅读全文
2019-10-22 18:59 工业·编程 ⁄ 共 4638字 暂无评论
前文已经向大家介绍了用脚本封装系统调用的方法。在本文中,我将向大家介绍使用.c文件封装系统调用的方法。 使用.c文件封装系统调用一般出于以下两个原因:一,系统调用已过时,可以使用新的系统调用替换旧的系统调用。系统调用的语义不变。二,封装后的函数改变了系统调用的语义。 stat系统调用的封装便是原因一的一个例子。 stat系统调用是106号系统调用。使用stat系统调用可以获取文件的属性,但是获取的属性值都是32位的,...
阅读全文
2019-10-21 18:53 工业·编程 ⁄ 共 8749字 评论 1 条
本文所有描述都是基于glibc-2.26。 系统调用 系统调用是程序员接触到的最底层的构建程序的组件。它们由内核实现,提供给程序调用。用户按照其调用规则可以实现调用。 glibc的封装方式 glibc使用了两种方式来封装系统调用。一种是由脚本生成。一种是.c文件。 使用.c文件封装系统调用,是因为封装过程比较复杂,除了按系统调用的调用规则来封装外,还要进行其他处理。而脚本生成则十分简单。只要按照系统调用的调用规则来封装即可...
阅读全文
  本文试图解答系统调用与库函数之间的关系、glibc库函数的实现原理、系统调用的实现原理等知识,本文讲述的CPU架构限定为ARM核心,为什么是ARM呢,原因很简单,X86我不熟。 系统调用概念   从某种程度上来说,操作系统就是一个计算机的资源管理器,也可以理解为一个虚拟的计算机。那么这台虚拟计算机要向外提供功能,就必须提供一些接口,这些接口就是系统调用。   有很多开发人员经常搞不清楚库函数和系统调用...
阅读全文
2019-10-19 07:49 工业·编程 ⁄ 共 2667字 暂无评论
最近在linux下写一个库,是给别人用的,要用到定时器这个功能,而且是多定时器任务的,在windows下实现是很方便的,但是在linux下就遇到了问题,linux下一个进程只能有一个定时器,如果我用了定时器去实现我的任务,那肯定是没问题的,如果用我库的人自己也创建了一个定时器,那么问题就出现了,我的定时器就被覆盖了。 我的功能肯定也受到了影响,所以linux下的定时器是需要解决的。 没办法,我就自己写了一个定时器类似功能的...
阅读全文
2019-10-18 07:45 工业·编程 ⁄ 共 8683字 暂无评论
第一章 什么是XML? 1.xml简介 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML...
阅读全文
2019-10-17 07:36 工业·编程 ⁄ 共 11273字 暂无评论
本文着重介绍解析xml的libxml2库的安装及使用,举例说明创建和解析xml的过程。是针对C语言开发人员使用 一、libxml2的安装   关于libxml2的介绍请参考官方网址http://xmlsoft.org/,下载最新的libxml2库http://xmlsoft.org/downloads.html。 具体安装步骤: 1、解压:$tar zxvf  libxml2-2.9.1.tar.gz 2、进入解压后的安装目录:$cd  libxml2-2.9.1 3、安装三部曲: 1)$./configure     2)...
阅读全文