系统函数
文章平均质量分 69
Leon_George
一只始终飞翔在嵌入式Linux ARM开发中的黑鸟,对bootloader、跟文件系统和Linux内核裁剪,以及对Linux底层应用和驱动开发也有些许心得。有志同道合的同学请关注我哦。
展开
-
利用NTP协议获取并更新系统时间
Network Time Protocol(NTP)协议是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟 源(如石英钟,GPS 等)做同步化,它可以提供高精确度的时间校正(LAN 上与标准时间差小于 1 毫秒,WAN 上几十毫秒),且可用加密确认的方式来防止恶毒的协议攻击。NTP 提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间 UTC。NTP 获得 UTC 的 时间来源可以是原子钟、天文台、卫星,也可以从 Internet 上获取。这样就有了准确而可靠的时间源。原创 2023-02-12 23:29:47 · 1521 阅读 · 0 评论 -
经典生产者-消费者问题解析
摘要:生产者和消费者问题在现实系统中是很普遍的。例如在一个多媒体系统中,生产者编码视频帧,而消费者消费(解码)视频帧,缓冲区的目的就是减少视频流的抖动。又如在图形用户接口设计中,生产者检测到鼠标和键盘事件,并将其插入到缓冲区中。消费者以某种基于优先级的方式从缓冲区中取出这些事件并显示在屏幕上。生产者和消费者模式共享一个有n个槽位的有限缓冲区。原创 2020-04-09 14:35:33 · 14443 阅读 · 2 评论 -
信号集操作函数一网打尽
本文详细讲述了信号集的概念,并分别列举了与其有关的各种操作函数,必要时举出了相关例子进行进一步阐述,旨在帮助大家更好的理解信号集操作函数的内在涵义和具体使用场景。原创 2022-12-07 22:04:16 · 582 阅读 · 0 评论 -
linux内核(驱动)编程中的延时函数都有哪些
摘要:Linux内核或驱动程序中经常会使用到一些延时函数,在这段时间里硬件设备可以完成相关的工作。本文主要讲述linux中经常使用到的纳秒级、毫秒级及秒级的延时函数及其使用方法和场景。1、时间度量先介绍两个有用的全局变量:HZ和jiffiesHZ是Linux内核中的一个重要全局变量,表示系统在1秒钟的时间里系统时钟中断(由硬件定时器产生)发生的次数。它一般取值为1000,但不同硬件平台有不同取值。系统初始化的时候,将一个全局计数器jiffies设置为0,此后每当时钟中断发生一次,系统就将jiffi原创 2021-10-18 22:34:35 · 2068 阅读 · 0 评论 -
设备驱动中的并发控制
在为操作系统编写驱动设备时,因为涉及到中断、多任务和多处理器SMP的处理,所以内核提供了诸如原子操作、信号量、完成量等几种并发控制机制,对公用资源进行保护。下文将分别予以阐述。1、原子变量原子变量就是,在对其进行操作时不会被其它任务或中断打断。而原子操作需要硬件的支持,因此时架构相关的,其API和原子类型的定义在内核include/asm/atomic.h文件中,都是用汇编语言实现的。它的优点是使用简单,但缺点是功能单一,只能做计数操作,保护的东西太少。在Linux中,原子变量的定义如下:typede原创 2021-10-17 23:39:01 · 789 阅读 · 0 评论 -
C库函数、系统函数等调用错误的处理方法
几乎所有的系统函数和库函数在执行时都会通过返回特定的值来说明成功或出错。我们在调用它们后,必须马上对其返回值进行检测,如果调用出错则要进行相应的处理(一般是向终端输出错误信息并终止程序运行)。否则在今后程序出错时,如果通过调试去定位到该错误将会花费很长的时间。当然也有某些系统调用从不失败(例如getpid()或_exit()等),在调用它们时可以不进行错误检测。1.如何发现系统调用出错...原创 2020-04-16 14:23:46 · 2382 阅读 · 0 评论 -
比atoi()函数更健壮的一类包装函数
今天介绍两个函数用以代替库函数atoi()、atol()和strtol()函数,原因是它能提供比库函数更好的错误检查机制。int getInt(const char *arg, int flags, const char *name);long getLong(const char *arg, int flags, const char *name);arg指向待转的数字字符串,flag...原创 2020-04-16 14:18:56 · 548 阅读 · 0 评论 -
Linux下的网络编程看这篇就够了
【摘要】本文主要讲述了网络编程的基本概念,包括各种协议、地址、套接字等,重点叙述了套接字的地址结构、操作函数及其编程方法和示例。原创 2020-03-26 11:28:31 · 648 阅读 · 0 评论 -
unix系统中实现读写的原子操作
众所周知在早期版本的Unix系统中,读函数read() 和写函数write()中并没有O_APPEND这一选项。所以为了在文件的末尾添加内容的话一般是分两步走:1:lseek(fd,0L,2)/*将文件位置指针定位到文件末尾*/2:write(fd,buf,size)/*将buf中的size个字节写入文件*/但这里有一个问题就是,如果系统是支持多进程的话,就会有可能发生错误。因为如...原创 2018-10-29 23:42:13 · 395 阅读 · 0 评论 -
open函数及其与openat函数的区别
一、原型#include <fcntl.h>int open(const char *path, int oflag, mode_t mode);int openat(int fd, const char *path, int oflag, mode_t mode );函数执行成功返回文件描述符,失败返回-1.二、相同点当传给函数的路径名是绝对路径时,二者无区...原创 2018-10-28 16:24:44 · 9084 阅读 · 2 评论 -
各种I/O函数的选用原则
应用程序可以通过诸如open、close、lseek、read、write和stat这样的函数来访问文件或I/O设备。更高级别的还有标准I/O及RIO( CS:AP网站参考代码 ,为了修补read等系统IO函数的不足而撰写的健壮的包装函数,它们自动处理不足值,为读文本行提供一种高效的带缓冲的方法。)在实际编程中如何选用这些函数呢?下面提供一些基本原则:只要又可能就使用标准I/O。特别是对磁...原创 2020-03-24 16:24:50 · 277 阅读 · 0 评论 -
非本地跳转函数setjmp和longjmp
C语言提供了一种用户级的异常控制流形式,称为非本地跳转(nonlocal jump),它可以将控制流直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用和返回序列。而这些都是通过两组函数实现的。setjmp函数首先来看看函数原型:#include <setjmp.h>int setjmp(jmp_buf env); //返回0int sigsetj...原创 2020-03-22 23:11:01 · 405 阅读 · 0 评论