gpt4 book ai didi

c - Linux 命令中的更多选项和编译错误

转载 作者:行者123 更新时间:2023-11-30 17:22:10 25 4
gpt4 key购买 nike

我试图在命令 $ printenv 中添加命令 date 作为选项。例如如果您尝试运行 $ printenv -d 它应该返回日期输出。

我从链接 ftp://ftp.ntua.gr/pub/gnu/coreutils/coreutils-8.23.tar.xz 获得了 src 代码,其中包含 Linux 发行版中的所有 coreutils .

我已经更改了 src/printenv.c 的源代码(该文件位于 coreutils.tar 文件中)。但我的下一步行动是什么?

我无法使用gcc printenv.c 编译它

Compile error: fatal error: config.h: No such file or directory
compilation terminated.

我应该制作 makefiles/configs 等并手动安装吗?如何?

我发布了更改后的代码(printenv.c)

    /* printenv -- print all or part of environment
Copyright (C) 1989-2014 Free Software Foundation, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */

/* Usage: printenv [variable...]

If no arguments are given, print the entire environment.
If one or more variable names are given, print the value of
each one that is set, and nothing for ones that are not set.

Exit status:
0 if all variables specified were found
1 if not
2 if some other error occurred

David MacKenzie and Richard Mlynarik */

#include <config.h>
#include <stdio.h>
#include <sys/types.h>
#include <getopt.h>

#include "system.h"

/* Exit status for syntax errors, etc. */
enum { PRINTENV_FAILURE = 2 };

/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "printenv"

#define AUTHORS \
proper_name ("David MacKenzie"), \
proper_name ("Richard Mlynarik")

static struct option const longopts[] =
{
{"null", no_argument, NULL, '0'},
{"date", required_argument, NULL, 'd'},
{GETOPT_HELP_OPTION_DECL},
{GETOPT_VERSION_OPTION_DECL},
{NULL, 0, NULL, 0}
};

/* Forward declarations. */
static void dateMachine (void);

void
usage (int status)
{
if (status != EXIT_SUCCESS)
emit_try_help ();
else
{
printf (_("\
Usage: %s [OPTION]... [VARIABLE]...\n\
Print the values of the specified environment VARIABLE(s).\n\
If no VARIABLE is specified, print name and value pairs for them all.\n\
\n\
"),
program_name);
fputs (_("\
-0, --null end each output line with NUL, not newline\n\
"), stdout);
fputs (HELP_OPTION_DESCRIPTION, stdout);
fputs (VERSION_OPTION_DESCRIPTION, stdout);
printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME);
emit_ancillary_info ();
}
exit (status);
}

int
main (int argc, char **argv)
{
char **env;
char *ep, *ap;
int i;
bool ok;
int optc;
bool opt_nul_terminate_output = false;

initialize_main (&argc, &argv);
set_program_name (argv[0]);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);

initialize_exit_failure (PRINTENV_FAILURE);
atexit (close_stdout);

while ((optc = getopt_long (argc, argv, "+iu:0d", longopts, NULL)) != -1)
{
switch (optc)
{
case '0':
opt_nul_terminate_output = true;
break;
case 'd':
dateMachine ();
break;
case_GETOPT_HELP_CHAR;
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
default:
usage (PRINTENV_FAILURE);
}
}

if (optind >= argc)
{
for (env = environ; *env != NULL; ++env)
printf ("%s%c", *env, opt_nul_terminate_output ? '\0' : '\n');
ok = true;
}
else
{
int matches = 0;

for (i = optind; i < argc; ++i)
{
bool matched = false;

/* 'printenv a=b' is silent, even if 'a=b=c' is in environ. */
if (strchr (argv[i], '='))
continue;

for (env = environ; *env; ++env)
{
ep = *env;
ap = argv[i];
while (*ep != '\0' && *ap != '\0' && *ep++ == *ap++)
{
if (*ep == '=' && *ap == '\0')
{
printf ("%s%c", ep + 1,
opt_nul_terminate_output ? '\0' : '\n');
matched = true;
break;
}
}
}

matches += matched;
}

ok = (matches == argc - optind);
}

exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
}

static void
dateMachine (void)
{
system(date);
}

最佳答案

如果您在 google 上搜索“printenv.c”,您会发现该文件的多个版本,您可以使用最少的 jiggery-pokery 来编译和运行它们。

示例:“http://www.opensource.apple.com/source/shell_cmds/shell_cmds-170/printenv/printenv.c

关于c - Linux 命令中的更多选项和编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com