【问题标题】:C. pathconf got error. path is nullC. pathconf 出错。路径为空
【发布时间】:2015-03-10 17:36:02
【问题描述】:

完整的代码如下,它只是通过 if 条件退出。 所以我改变了条件argc != 1,它一直工作到pathconf。 在函数pr_pathconf 中,path 为空。 我不知道是什么问题。请给我一些帮助。

#include <stdlib.h>
#include <errno.h> 
#include <stdio.h>
#include <unistd.h>

static void pr_sysconf(char *, int);
static void pr_pathconf(char *, char *, int);

int main(int argc, char *argv[])
{
    printf(" argc = %d\n", argc);
    if(argc != 2)
    {
        fprintf(stderr, "usage : a.out <dirname>\n");
        exit(1);
    }
    pr_sysconf("ARG_MAX         =",_SC_ARG_MAX); 
    pr_sysconf("CHILD_MAX       =",_SC_CHILD_MAX);
    pr_sysconf("clock ticks/second =", _SC_CLK_TCK);
    pr_sysconf("NGROUPS_MAX     =",_SC_NGROUPS_MAX);
    pr_sysconf("OPEN_MAX        =",_SC_OPEN_MAX);
#ifdef      _SC_STREAM_MAX
    pr_sysconf("STREAM_MAX      =",_SC_STREAM_MAX);
#endif
#ifdef      _SC_TZNAME_MAX
    pr_sysconf("TZNAME_MAX      =",_SC_TZNAME_MAX);
#endif
    pr_sysconf("_POSIX_JOB_CONTROL =",_SC_JOB_CONTROL);
    pr_sysconf("_POSIX_SAVED_IDS =", _SC_SAVED_IDS);
    pr_sysconf("_POSIX_VERSION  =",_SC_VERSION);

    pr_pathconf("MAX_CANON      =","/dev/tty", _PC_MAX_CANON);
    pr_pathconf("MAX_INPUT      =","/dev/tty", _PC_MAX_INPUT);
    pr_pathconf("_POSIX_VDISABLE=","/dev/tty", _PC_VDISABLE);
    pr_pathconf("LINK_MAX       =", argv[1], _PC_LINK_MAX);
    pr_pathconf("NAME_MAX       =", argv[1], _PC_NAME_MAX);
    pr_pathconf("PATH_MAX       =", argv[1], _PC_PATH_MAX);
    pr_pathconf("PIPE_BUF       =", argv[1], _PC_PIPE_BUF);
    pr_pathconf("_POSIX_NO_TRUNC=", argv[1], _PC_NO_TRUNC);
    pr_pathconf("_POSIX_CHOWN_RESTRICTED =", argv[1], _PC_CHOWN_RESTRICTED);

    exit(0);
}

static void pr_sysconf(char *mesg, int name)
{
    long val;
    fputs(mesg, stdout);
    errno = 0;
    if((val = sysconf(name))<0){
        if(errno != 0)
        {
            fprintf(stderr, "sysconf error\n");
            exit(1);
        }
        fputs(" (not defined)\n", stdout);
    }else
        printf(" %ld\n", val);
}

static void pr_pathconf(char *mesg, char *path, int name)
{
    long val;

    fputs(mesg, stdout);
    errno = 0;
    if((val = pathconf(path,name))<0)
    {
        if(errno != 0)
        {
            fprintf(stderr, "pathconf error, path = %s\n", path);
            exit(1);
        }
        fputs(" (no limit)\n", stdout);
    }
    else
        printf(" %ld\n", val);
}

【问题讨论】:

  • 改进了文字,添加了c标签,添加了语法着色
  • 我从您的代码中提取了一些明显的复制粘贴重复项,之后该程序对我有效。你真的在命令行上传递了一个路径名吗?

标签: c argv argc


【解决方案1】:

我发现了我的问题。当我在 linux 终端中运行程序时,我使用了 ./a.out。当我使用 ./a.out ./ 结果是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多