• 2.1 打印所有可能的sysconf和pathconf值


    (1) sysconf() 返回选项 (变量) 的当前值,这个值可配置的但也是受系统限制的。在成功完成的情况下,sysconf() 返回变量的当前值。该值受到的限制将少于编译时 <limits.h>, <unistd.h> 或 <time.h> 中可用的对应值。大多数这些变量的值在调用进程的生存时间内不变。

    如果出错,那么函数返回 -1 ,并适当地设置 errno 。当没有错误发生时, -1 也是一个合法的返回值。因此,程序要检查错误,应该在调用 sysconf() 之前将 errno 设置为 0 ,然后,如果返回 -1,则检验到错误。

    (2) pathconf函数返回配置文件的限制值,是与文件或目录相关联的运行时限制。path参数是你想得到限制值的路径,name是想得到限制值的名称,name的取值主要有以下几个取值:

    限制名

    说明

    name参数

    FILESIZEBITS

    在指定目录中允许的普通文件最大长度所需的最少位数

    _PC_FILESIZEBITS

    LINK_MAX

    文件链接数的最大值

    _PC_LINK_MAX

    MAX_CANON

    终端规范输入队列的最大字节数

    _PC_MAX_CANON

    MAX_INPUT

    终端输入队列可用空间的字节数

    _PC_MAX_INPUT

    NAME_MAX

    文件名的最大字节数

    _PC_NAME_MAX

    PATH_MAX

    相对路径名的最大字节数,包括null

    _PC_PATH_MAX

    PIPE_BUF

    能原子的写到管道的最大字节数

    _PC_PIPE_BUF

    SYMLINK_MAX

    符号链接中的字节数

    _PC_SYMLINK_MAX

    std/conf.c.modified

     1 #include "apue.h"
     2 #include <errno.h>
     3 #include <limits.h>
     4 static void    pr_sysconf(char *, int);
     5 static void    pr_pathconf(char *, char *, int);
     6 int
     7 main(int argc, char *argv[])
     8 {
     9     if (argc != 2)
    10         err_quit("usage: a.out <dirname>");
    11 #ifdef ARG_MAX
    12     printf("ARG_MAX defined to be %d
    ", ARG_MAX+0);
    13 #else
    14     printf("no symbol for ARG_MAX
    ");
    15 #endif
    16 #ifdef _SC_ARG_MAX
    17     pr_sysconf("ARG_MAX =", _SC_ARG_MAX);
    18 #else
    19     printf("no symbol for _SC_ARG_MAX
    ");
    20 #endif
    21 /* similar processing for all the rest of the sysconf symbols... */
    22 
    23 #ifdef MAX_CANON
    24     printf("MAX_CANON defined to be %d
    ", MAX_CANON+0);
    25 #else
    26     printf("no symbol for MAX_CANON
    ");
    27 #endif
    28 #ifdef _PC_MAX_CANON
    29     pr_pathconf("MAX_CANON =", argv[1], _PC_MAX_CANON);
    30 #else
    31     printf("no symbol for _PC_MAX_CANON
    ");
    32 #endif
    33 /* similar processing for all the rest of the pathconf symbols... */
    34     exit(0);
    35 }
    36 static void
    37 pr_sysconf(char *mesg, int name)
    38 {
    39     long    val;
    40     fputs(mesg, stdout);
    41     errno = 0;
    42     if ((val = sysconf(name)) < 0) {
    43         if (errno != 0) {
    44             if (errno == EINVAL)
    45                 fputs(" (not supported)
    ", stdout);
    46             else
    47                 err_sys("sysconf error");
    48         } else {
    49             fputs(" (no limit)
    ", stdout);
    50         }
    51     } else {
    52         printf(" %ld
    ", val);
    53     }
    54 }
    55 static void
    56 pr_pathconf(char *mesg, char *path, int name)
    57 {
    58     long    val;
    59     fputs(mesg, stdout);
    60     errno = 0;
    61     if ((val = pathconf(path, name)) < 0) {
    62         if (errno != 0) {
    63             if (errno == EINVAL)
    64                 fputs(" (not supported)
    ", stdout);
    65             else
    66                 err_sys("pathconf error, path = %s", path);
    67         } else {
    68             fputs(" (no limit)
    ", stdout);
    69         }
    70     } else {
    71         printf(" %ld
    ", val);
    72     }
    73 }
  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/paullam/p/3849913.html
Copyright © 2020-2023  润新知