Unix学习之 APUE学习笔记 之 系统限制,errno,时间观念
主要是学习:
http://blog.csdn.net/intrepyd/article/details/4508770
中的记录,并加上 对《深入Linux系统内核 》的学习精简版
1. 系统限制
目的: 为了保证系统的兼容性以及可以执行
主要分为编译时系统限制和运行时系统限制,整的跟C++多态一样
编译时系统限制可以在头文件中定义,例如<limit.h>中对于最大最小值的限制,运行时限制要求进程调用一个函数实现,主要分为sysconf 函数查询与目录和文件不相关的运行时限制,pathconf和fpathconf与文件和目录相关的运行时限制
实际上,编译时限制也可以通过函数进行查询(如sysconf(SC_CHAR_MAX)),而运行时限制也能在头文件中定义。或许只有那些由内核通过proc文件系统进行读取或者配置的才能称为运行时限制
可以在终端通过 find /proc/sys-name '*max*'找出这些限制
使用上述的三个函数实现运行时限制:
long sysconf(int name);
long pathconf(const char *pathname,int name);
long fpathconf(int filedes,int name);
2. errno 变量
当一个函数出错时,经常的是返回一个负值(-1),而且整型变量errno通常被设置为含有附加信息的一个值,例如:open()正常返回一个非负的文件描述符,而在出错时,有大约15中的errno值
当使用errno时,注意两点:
(1) 如果没有出错,则改制不会被函数改变,仅当出错时,才检查errno值
(2)任意函数的errno都不会被设置为0,在<errno.h>中所有值都不为0
打印出错信息: C中定义了两个函数用于打印出错信息
char * strerror (int errnum);void perror(const char *msg);
在多线程下,多线程共享进程的地址空间,但每个线程都有自己的errno,避免一个线程影响另一个线程
3. 时间
系统使用的是两种不同的时间概念: 进程时间和日历时间
其中进程时间(clock_t)分为:时钟时间,用户CPU时间,系统CPU时间,时钟时间又成为墙上始终时间,记录继承运行的总时间,其值与系统中同时运行的时间数有关
用户CPU时间,是执行用户指令所用的时间,系统CPU时间,进程执行内核程序所用的时间
任一进程及其终止子进程(通过父进程wait或waitpid)的用户和系统CPU时间可以通过调用函数times函数获得,保存为tms数据结构,返回的是时钟时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述