53

UnixのCで相対パスを絶対パスに変換するにはどうすればよいですか? これに便利なシステム機能はありますか?

Windows にはGetFullPathNameその仕事をする機能がありますが、Unix では似たようなものは見つかりませんでした...

4

4 に答える 4

64

realpath()を使用します。

このrealpath()関数は、 が指すパス名から、同じファイルを指定する絶対パス名を導出します。 この絶対パス名の解決には、' '、' '、またはシンボリック リンクfile_nameは含まれません。生成されたパス名は、null で終わる文字列として最大 バイト数まで、 が指すバッファに格納され ます。...{PATH_MAX}resolved_name

resolved_nameが null ポインターの場合、 の動作realpath()は実装定義です。


次の例では、symlinkpath 引数で識別されるファイルの絶対パス名を生成します。生成されたパス名は、actualpath 配列に格納されます。

#include <stdlib.h>
...
char *symlinkpath = "/tmp/symlink/file";
char actualpath [PATH_MAX+1];
char *ptr;


ptr = realpath(symlinkpath, actualpath);
于 2008-10-23T09:03:08.520 に答える
0

「getcwd」も試してください

#include <unistd.h>

char cwd[100000];
getcwd(cwd, sizeof(cwd));
std::cout << "Absolute path: "<< cwd << "/" << __FILE__ << std::endl;

結果:

Absolute path: /media/setivolkylany/WorkDisk/Programming/Sources/MichailFlenov/main.cpp

テスト環境:

setivolkylany@localhost$/ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:    8.6
Codename:   jessie
setivolkylany@localhost$/ uname -a
Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux
setivolkylany@localhost$/ g++ --version
g++ (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
于 2016-12-18T19:40:56.150 に答える