《Unix环境高级编程》 总结 (一)

一 、Unix基础知识

1、Linux 用户文件:/etc/passwd,其格式如下:
    登录名:x:uid:gid:注释:起初目录:shell程序
2、文件名为除(/)和空字符之外的任一字符,POSIX推荐:字母、数字、句号(.)、短横线(-)、下划线(_)。
3、errno字义在<errno.h>中,每个线程都有它局部的errno。打印出错信息的函数如下:
    #include <string.h>
    char *strerror(int errnum);    // 返回相应errnum的字符串
    
    #include <stdio.h>
    void perror(const char *msg);   // 返回  [msg:<当前errno的字符串><\n>]
4、<errno.h>中定义的错误类型:致命性的、非致命性的
    与资源相关的非致命性错误:EAGAIN、ENFILE、ENOBUFS、ENOLCK、ENOSPC、EWOULDBLOCK
5、组文件:/etc/group,POSIX要求至少支持8个附属组,但实现大多数系统至少支持16个。
6、可键盘产生的信号:中断键(Delete键或Ctrl+C) (SIGINT : )、退出键(Ctrl+\)。
    也可用kill函数产生(限制:向一个进程发送信号,必须为该进程的所有者或者为超级用户)
7、两种时间值:日历时间(1970-1-1 00:00:00 至今的秒数) 
                    数据结构:time_t
                进程时间(CPU时间):以时针滴答计算,每秒取值不定,如50、60、100等 (用sysconf()得到)
                    数据结构:clock_t
8、进程时间的度量:
    时针时间:进程运行的时间总量
    用户CPU时间
    系统CPU时间
    
    用户CPU时间和系统CPU时间之和为CPU时间
    
    打印进程时间,如下:
    time -p 命令
    real 0.09  时针时间
    user 0.00  用户CPU时间
    sys 0.00   系统CPU时间


二、Unix标准与实现

1、restrict关键字:告诉编译器指针可优化,指出该指针的对象在函数中只能通过该指针进行访问;
2、ISO C标准头文件(24个):
     <assert.h>----------------------验证程序断言
     <complex.h> ----------------------支持复数算术运算
     <ctype.h> ----------------------字符类型
     <errno.h> ----------------------出错码
     <fenv.h> ----------------------浮点环境
     <float.h> ----------------------浮点常量
     <inttypes.h> ----------------------整型格式转换
     <iso646.h> ----------------------替代关系操作符宏
     <limits.h> ----------------------实现常量
     <locale.h>----------------------局部类别
     <math.h> ----------------------数学常量
     <setjmp.h>----------------------非局部goto
     <signal.h> ----------------------信号
     <stdarg.h>----------------------可变参数表
     <stdbool.h> ----------------------布尔类型和值
     <stddef.h> ----------------------标准定义
     <stdint.h> ----------------------整型
     <stdio.h>----------------------标准I/O库
     <stdlib.h> ----------------------实用程序库函数
     <string.h> ----------------------字符串操作
     <tgmath.h>----------------------通用类型数学宏
     <time.h>----------------------时间和日期
     <wchar.h>----------------------扩展的多字节和宽字符支持
     <wctype.h> ----------------------宽字符分类和映射支持
3、POSIX标准定义的必须的头文件(26项)
     <dirent.h>----------------------目录项
     <fcntl.h>----------------------文件控制
     <fnmatch.h>----------------------文件名匹配类型
     <glob.h>----------------------路径名模式匹配类型
     <grp.h> ----------------------组文件
     <netdb.h>----------------------网络数据库操作
     <pwd.h>----------------------口令文件
     <regex.h>----------------------正则表达式
     <tar.h> ----------------------tar归档值
     <termios.h> ----------------------终端I/O
     <unistd.h>----------------------符号常量
     <utime.h> ----------------------文件时间
     <wordexp.h>----------------------字扩展类型
     <arpa/inet.h>----------------------Internet定义
     <net/if..h> ----------------------套接字本地接口
     <netinet/in.h> ----------------------Internet地址族
     <netinet/tcp.h>----------------------传输控制协议定义
     <sys/mman.h>----------------------内存管理声明
     <sys/select.h>----------------------select函数
     <sys/socket.h>----------------------套接字接口
     <sys/stat.h> ----------------------文件状态
     <sys/times.h> ----------------------进程时间
     <sys/types.h> ----------------------基本系统数据类型
     <sys/un.h>----------------------UNIX域套接字定义
     <sys/utsname.h>----------------------系统名
     <sys/wait.h>----------------------进程控制
4、POSIX标准定义的XSI扩展头文件(26项)
     <cpio.h> ----------------------cpio归档值
     <dlfcn.h>----------------------动态链接
     <fmtmsg.h>----------------------消息显示结构
<ftw.h>----------------------文件树漫游
<iconv.h>----------------------代码集转换实用程序
<langinfo.h> ----------------------语言信息常量
<libgen.h> ----------------------模式匹配函数定义
<monetary.h>----------------------货币类型
<ndbm.h>----------------------数据库操作
<nl_types.h>----------------------消息类别
<poll.h> ----------------------轮询函数
<search.h>----------------------搜索表
<strings.h>----------------------字符串操作
<syslog.h>----------------------系统出错日志记录
<ucontext.h>----------------------用户上下文
<ulimit.h>----------------------用户限制
<utmpx.h>----------------------用户帐户数据库
<sys/ipc.h>----------------------IPC
<sys/msg.h>----------------------消息队列
<sys/resource.h>-------------------资源操作
<sys/sem.h>----------------------信号量
<sys/shm.h>----------------------共享存储
<sys/statvfs.h>----------------------文件系统信息
<sys/time.h> ----------------------时间类型
<sys/timeb.h>----------------------附加的日期和时间定义
<sys/uio.h> ----------------------矢量I/O操作
5、POSIX标准定义的可选头文件(8项)
<aio.h>----------------------异步I/O
<mqueue.h> ----------------------消息队列
<pthread.h>----------------------线程
<sched.h> ----------------------执行调度
<semaphore.h>---------------------信号量
<spawn.h> ----------------------实时spawn接口
<stropts.h> ----------------------XSI STREAMS接口
<trace.h>----------------------时间跟踪
6、Linux中的限制分类:
     编译时限制(定义在头文件中)
     与文件或目录无头的运行时限制(sysconf()获取)
     与文件或目录相关的运行时限制(pathconf()和fpathconf()获取)
7、<limits.h>中定义的整型值大小:

8、函数sysconf、pathconf 和 fpathconf

sysconf()中的name 为 _SC_ 开头的常量;pathconf和fpathconf中的name以 _PC_ 开头;如果 name 错误,3个函数都返回-1(errno = EINVAL)

sysconf() 的 name 参数取值:

pathconf()和fpathconf中 name 取值:

限制:
_PC_MAX_CANON 和 _PC_MAX_INPUT 引用的文件必须为终端文件;
_PC_LINK_MAX 和 _PC_TIMESTAMP_PESOLUTION 引用的文件可为文件或目录,当为目录时,返回值用于目录本身;
_PC_FILESIZEBITS 和 _PC_NAME_MAX 引用的必有为目录,返回值用于该目录中的文件名;
_PC_PATH_MAX 引用的必须为目录;
_PC_PIPE_BUF 引用的必须为管道、FIFO或目录;
_PC_SYMLINK_MAX 引用的必须为目录

9、如同对限制的处理,有3种处理选项的方法:
编译时选项定义在<unistd.h>中;
与文件或目录无关的运行时选项用sysconf()判断;
与文件或目录相关的运行时选项用pathconf()或fpathconf()判断;




10、<sys/types.h>中定义的数据类型:





































  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值