700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言中函数realpath c - 用C的realpath函数的例子 - SO中文参考 - www.soinside.com

c语言中函数realpath c - 用C的realpath函数的例子 - SO中文参考 - www.soinside.com

时间:2023-05-16 12:02:43

相关推荐

c语言中函数realpath c - 用C的realpath函数的例子 - SO中文参考 - www.soinside.com

什么realpath()功能所做的就是告诉你一个文件的路径时,所有符号链接都得到了解决。它不一定是一个绝对路径,如果你提供的价值是相对的名字,但部分取决于你是否穿越与链接值绝对名称的任何符号链接 - 如果你这样做,那么输出是一个绝对的名字毕竟。此外,如果相对名称遍历到根目录(或“超越”,如“../../../../../ ..”当在目录层次深只有三个级别)。

你可能有一个“真实路径”计划已经在你的机器上。这里的(非标)版本,我写的。

/*

@(#)File: $RCSfile: realpath.c,v $

@(#)Version: $Revision: 1.3 $

@(#)Last changed: $Date: /10/23 20:23:44 $

@(#)Purpose: Command to evaluate realpath(3) on given arguments.

@(#)Author: J Leffler

@(#)Copyright: (C) JLSS

@(#)Product: :PRODUCT:

*/

/*TABSTOP=4*/

#if __STDC_VERSION__ >= 199901L

#define _XOPEN_SOURCE 600

#else

#define _XOPEN_SOURCE 500

#endif /* __STDC_VERSION__ */

#include

#include

#include

#include

#include "stderr.h"

static const char optstr[] = "hlsV";

static const char usestr[] = "[-hslV] given-path [...]";

static const char hlpstr[] =

" -h Print this help message\n"

" -l Long format: print given-path and real-path\n"

" -s Short format: print just real-path\n"

" -V Print version and exit\n"

;

enum { FMT_LONG, FMT_SHORT };

static int format_type = FMT_LONG;

#ifndef lint

/* Prevent over-aggressive optimizers from eliminating ID string */

extern const char jlss_id_realpath_c[];

const char jlss_id_realpath_c[] = "@(#)$Id: realpath.c,v 1.3 /10/23 20:23:44 jleffler Exp $";

#endif /* lint */

static int eval_realpath(const char *given)

{

char realname[_POSIX_PATH_MAX];

int rc = 0;

if (realpath(given, realname) == 0)

{

rc = -1;

err_sysrem("failed to resolve real path name for %s\n", given);

}

else if (format_type == FMT_SHORT)

printf("%s\n", realname);

else

printf("%s %s\n", given, realname);

return(rc);

}

int main(int argc, char **argv)

{

int i;

int rc = EXIT_SUCCESS;

int opt;

err_setarg0(argv[0]);

while ((opt = getopt(argc, argv, optstr)) != -1)

{

switch (opt)

{

case 'V':

err_version("REALPATH", &"@(#)$Revision: 1.3 $ ($Date: /10/23 20:23:44 $)"[4]);

break;

case 'h':

err_help(usestr, hlpstr);

break;

case 'l':

format_type = FMT_LONG;

break;

case 's':

format_type = FMT_SHORT;

break;

default:

err_usage(usestr);

break;

}

}

for (i = optind; i < argc; i++)

{

if (eval_realpath(argv[i]) != 0)

rc = EXIT_FAILURE;

}

return(rc);

}

我需要它来测试一些软件,被评估的路径的安全性,以确保我的代码正在评估给出的路径为realpath()做了同样的解决地点需要。或许,这将是明智的将它与“-a”选项扩展,以确保(由前缀getcwd()到相对路径的结果)名称映射到绝对名称。

(来源为stderr.c,stderr.h可以在网上,如果你知道去哪里找或者联系我发现 - 见我的个人资料)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。