ch02 UNIX标准化及实现
来源:互联网 发布:opencv python 投影法 编辑:程序博客网 时间:2024/06/05 06:32
*sysconf、pathconf 和fpathconf 函数
#include <unistd.h>
long sysconf(int name);
long pathconf(const char pathname, int name);
long fpathconf(int fields, int name);
表2-5中列出了这三个函数所使用的name参数。以_SC_开始的常数用作为sysconf的参数,而以_PC_开始的常数则作为pathconf或fpathconf的参数。
表2-5 对sysconf、pathconf和fpathconf的限制及 name参数
---------------------------------------------------------------------------------------------
限 制 名 说明 name 参数
---------------------------------------------------------------------------------------------
ARG_MAX exec函数的参数最大长度(字节) _SC_ARG_MAX
CHILD_MAX 每个实际用户 ID的最大进程数 _SC_CHILD_MAX
clock ticks/second 每秒时钟滴答数 _SC_CLK_TCK
NGROUP_MAX 每个进程的最大同时添加组ID数 _SC_NGROUPS_MAX
OPEN_MAX 每个进程最大打开文件数 _SC_OPEN_MAX
PASS_MAX 口令中的最大有效字符数 _SC_PASS_MAX
STREAM_MAX 在任一时刻每个进程的最大标准 I/O 流数——如 _SC_STREAM_MAX
若定义,则其值一定与FOPEN_MAX相同
TZNAME_MAX 时区名中的最大字节数 _SC_TZNAME_MAX
---------------------------------------------------------------------------------------------
_POSIX_JOB_CONTROL 指明实现是否支持作业控制 _SC_JOB_CONTROL
_POSIX_SAVED_IDS 指明实现是否支持保存的设置 -用户-ID和保存的 _SC_SAVED_IDS
设置-组-ID
_POSIX_VERSION 指明POSIX.1版本 _SC_VERSION
_XOPEN_VERSION 指明XPG版本(非 POSIX.1) _SC_XOPEN_VERSION
---------------------------------------------------------------------------------------------
LINK_MAX 文件连接数的最大值 _PC_LINK_MAX
MAX_CANON 在一终端规范输入队列的最大字节数 _PC_MAX_CANON
MAX_INPUT 终端输入队列可用空间的字节数 _PC_MAX_INPUT
NAME_MAX 文件名中的最大字节数(不包括 null结束符) _PC_NAME_MAX
PATH_MAX 相对路径名中的最大字节数(不包括 null结束符) _PC_PATH_MAX
PIPE_BUF 能原子地写到一管道的最大字节数 _PC_PIPE_BUF
_POSIX_CHOWN_RESTRICTED 指明使用chown是否受到限制 _PC_CHOWN_RESTRICTED
_POSIX_NO_TRUNC 指明若路径名长于 NAME_MAX是否产生一错误 _PC_NO_TRUNC
_POSIX_VDISABLE 若定义,终端专用字符可用此值禁止 _PC_VDISABLE
#include <errno.h>
#include <limits.h>
#include "ourhdr.h"
#ifdef PATH_MAX
static int pathmax = PATH_MAX;
#else
static int pathmax =0;
#endif
char * path_alloc (int *size)
{
char *ptr;
if(pathmax == 0)
{
errno = 0;
if((pathmax = pathconf("/", _PC_PATH_MAX)) < 0)
{
if(errno == 0)
pathmax = PATH_MAX_GUESS;
else
err_sys("pathconf error for _PC_PATH_MAX");
}
else
pathmax++;
}
if((ptr = malloc(pathmax + 1)) == NULL)
err_sys("malloc error for pathname");
if(size != NULL)
*size = pathmax + 1;
return(ptr);
}
*确定文件描述符数
#include <errno.h>
#include <limits.h>
#include "ourhdr.h"
#ifdef OPEN_MAX
static int openmax = OPEN_MAX;
#else
static int openmax = 0;
#endif
#define OPEN_MAX_GUESS 256
int open_max(void)
{
if(openmax == 0)
{
errno = 0;
if((openmax = sysconf(_SC_OPEN_MAX)) < 0)
{
if(errno == 0)
openmax = OPEN_MAX_GUESS;
else
err_sys("sysconf error for _SC_OPEN_MAX");
}
}
return(openmax);
}
*功能测试宏:__STDC__
#ifdef _STDC__
void *myfunc(const char *, int);
#else
void *myfunc();
#endif
* 基本系统数据类型
----------------------------------------------------------------------------------
类型 说明
----------------------------------------------------------------------------------
caddr_t 内存地址( 12.9节)
clock_t 时钟滴答计数器(进程时间) (1.10节)
comp_t 压缩的时钟滴答( 8.13节)
dev_t 设备号(主和次)(4.23节)
fd_set 文件描述符集( 12.5.1节)
fpos_t 文件位置( 5.10节)
gid_t 数值组ID
ino_t i节点编号( 4.14节)
mode_t 文件类型,文件创建方式( 4.5节)
n1ink_t 目录项的连接计数( 4.10节)
off_t 文件长度和位移量(带符号的)(lseek, 3.6节)
pid_t 进程ID和进程组ID(带符号的)(8.2和9.4节)
ptrdiff_t 两个指针相减的结果(带符号的)
r1im_t 资源限制( 7.11节)
sig_atomic_t 能原子地存取的数据类型( 10.15节)
sigset_t 信号集(10.11节)
size_t 对象(例如字符串)长度(不带符号的) (3.7节)
ssize_t 返回字节计数的函数(带符号的)(read, write, 3.7节)
time_t 日历时间的秒计数器( 1.10节)
uid_t 数值用户ID
wchar_t 能表示所有不同的字符码
#include <unistd.h>
long sysconf(int name);
long pathconf(const char pathname, int name);
long fpathconf(int fields, int name);
表2-5中列出了这三个函数所使用的name参数。以_SC_开始的常数用作为sysconf的参数,而以_PC_开始的常数则作为pathconf或fpathconf的参数。
表2-5 对sysconf、pathconf和fpathconf的限制及 name参数
---------------------------------------------------------------------------------------------
限 制 名 说明 name 参数
---------------------------------------------------------------------------------------------
ARG_MAX exec函数的参数最大长度(字节) _SC_ARG_MAX
CHILD_MAX 每个实际用户 ID的最大进程数 _SC_CHILD_MAX
clock ticks/second 每秒时钟滴答数 _SC_CLK_TCK
NGROUP_MAX 每个进程的最大同时添加组ID数 _SC_NGROUPS_MAX
OPEN_MAX 每个进程最大打开文件数 _SC_OPEN_MAX
PASS_MAX 口令中的最大有效字符数 _SC_PASS_MAX
STREAM_MAX 在任一时刻每个进程的最大标准 I/O 流数——如 _SC_STREAM_MAX
若定义,则其值一定与FOPEN_MAX相同
TZNAME_MAX 时区名中的最大字节数 _SC_TZNAME_MAX
---------------------------------------------------------------------------------------------
_POSIX_JOB_CONTROL 指明实现是否支持作业控制 _SC_JOB_CONTROL
_POSIX_SAVED_IDS 指明实现是否支持保存的设置 -用户-ID和保存的 _SC_SAVED_IDS
设置-组-ID
_POSIX_VERSION 指明POSIX.1版本 _SC_VERSION
_XOPEN_VERSION 指明XPG版本(非 POSIX.1) _SC_XOPEN_VERSION
---------------------------------------------------------------------------------------------
LINK_MAX 文件连接数的最大值 _PC_LINK_MAX
MAX_CANON 在一终端规范输入队列的最大字节数 _PC_MAX_CANON
MAX_INPUT 终端输入队列可用空间的字节数 _PC_MAX_INPUT
NAME_MAX 文件名中的最大字节数(不包括 null结束符) _PC_NAME_MAX
PATH_MAX 相对路径名中的最大字节数(不包括 null结束符) _PC_PATH_MAX
PIPE_BUF 能原子地写到一管道的最大字节数 _PC_PIPE_BUF
_POSIX_CHOWN_RESTRICTED 指明使用chown是否受到限制 _PC_CHOWN_RESTRICTED
_POSIX_NO_TRUNC 指明若路径名长于 NAME_MAX是否产生一错误 _PC_NO_TRUNC
_POSIX_VDISABLE 若定义,终端专用字符可用此值禁止 _PC_VDISABLE
---------------------------------------------------------------------------------------------
*具体输出:
ARG_MAX = 2097152
CHILD_MAX = (not defined)
clock ticks/second = 100
NGROUPS_MAX = 65536
OPEN_MAX = 1024
STREAM_MAX = 16
TZNAME_MAX = 6
_POSIX_JOB_CONTROL = 1
_POSIX_SAVED_IDS = 1
_POSIX_VERSION = 200809
MAX_CANON = 255
MAX_INPUT = 255
_POSIX_VDISABLE = 0
LINK_MAX = 32000
NAME_MAX = 255
PATH_MAX = 4096
PIPE_BUF = 4096
_POSIX_NO_TRUNC = 1
_POSIX_CHOWN_RESTRICTED = 1
#include <errno.h>
#include <limits.h>
#include "ourhdr.h"
#ifdef PATH_MAX
static int pathmax = PATH_MAX;
#else
static int pathmax =0;
#endif
char * path_alloc (int *size)
{
char *ptr;
if(pathmax == 0)
{
errno = 0;
if((pathmax = pathconf("/", _PC_PATH_MAX)) < 0)
{
if(errno == 0)
pathmax = PATH_MAX_GUESS;
else
err_sys("pathconf error for _PC_PATH_MAX");
}
else
pathmax++;
}
if((ptr = malloc(pathmax + 1)) == NULL)
err_sys("malloc error for pathname");
if(size != NULL)
*size = pathmax + 1;
return(ptr);
}
*确定文件描述符数
#include <errno.h>
#include <limits.h>
#include "ourhdr.h"
#ifdef OPEN_MAX
static int openmax = OPEN_MAX;
#else
static int openmax = 0;
#endif
#define OPEN_MAX_GUESS 256
int open_max(void)
{
if(openmax == 0)
{
errno = 0;
if((openmax = sysconf(_SC_OPEN_MAX)) < 0)
{
if(errno == 0)
openmax = OPEN_MAX_GUESS;
else
err_sys("sysconf error for _SC_OPEN_MAX");
}
}
return(openmax);
}
*功能测试宏:__STDC__
#ifdef _STDC__
void *myfunc(const char *, int);
#else
void *myfunc();
#endif
* 基本系统数据类型
----------------------------------------------------------------------------------
类型 说明
----------------------------------------------------------------------------------
caddr_t 内存地址( 12.9节)
clock_t 时钟滴答计数器(进程时间) (1.10节)
comp_t 压缩的时钟滴答( 8.13节)
dev_t 设备号(主和次)(4.23节)
fd_set 文件描述符集( 12.5.1节)
fpos_t 文件位置( 5.10节)
gid_t 数值组ID
ino_t i节点编号( 4.14节)
mode_t 文件类型,文件创建方式( 4.5节)
n1ink_t 目录项的连接计数( 4.10节)
off_t 文件长度和位移量(带符号的)(lseek, 3.6节)
pid_t 进程ID和进程组ID(带符号的)(8.2和9.4节)
ptrdiff_t 两个指针相减的结果(带符号的)
r1im_t 资源限制( 7.11节)
sig_atomic_t 能原子地存取的数据类型( 10.15节)
sigset_t 信号集(10.11节)
size_t 对象(例如字符串)长度(不带符号的) (3.7节)
ssize_t 返回字节计数的函数(带符号的)(read, write, 3.7节)
time_t 日历时间的秒计数器( 1.10节)
uid_t 数值用户ID
wchar_t 能表示所有不同的字符码
- ch02 UNIX标准化及实现
- UNIX标准化及实现
- UNIX标准化及实现
- 第二章 UNIX标准化及实现
- 《UNIX环境高级编程》笔记--UNIX标准化及实现
- 《UNIX环境高级编程》笔记2--UNIX标准化及实现
- 【Unix】标准化以及实现
- APUE学习笔记(02)-UNIX标准化及实现
- AUPE学习第二章------UNIX标准化及实现
- AUPE学习第二章------UNIX标准化及实现1
- APUE-第二章学习-UNIX标准化及实现-习题
- [UNIX编程笔记] 【APUE-4】 UNIX标准化及实现与sysconf、fpathconf、pathconf函数
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- UNIX环境高级编程(3):UNIX标准化及实现(1)
- UNIX环境高级编程(4):UNIX标准化及实现(2)
- Linux的那些事儿(4)----Linux环境下编程之Unix标准化及实现
- APUE读书笔记(2.0) ——第二章 Unix 标准化及实现
- UNIX标准化
- HDU1285(拓扑排序(模板))
- C#多线程实现方法——异步委托/调用
- Android消息队列及线程机制详解
- [热身题][hdoj_1020]Encoding
- Android中日期操作总结
- ch02 UNIX标准化及实现
- 日期选择器DatePickerDialog简化使用
- XPages之x和pages (1) ~ (5)
- undo系列学习之深入剖析一个事务的操作流程
- JAVA线程之四----并发实战
- Linux下修改网卡的ip地址
- 系统引导过程
- 系统调用实现原理
- jquery来实现异步请求并改变页面内容的具体做法