mkdir がチルダ (~) を使用できないのはなぜですか?
質問
書くとき
mkdir("~/folder1" , 0777);
Linux ではディレクトリの作成に失敗しました。交換すると ~
ホームディレクトリを展開すると、正常に動作します。使用上の問題は何ですか ~
?
ありがとう
解決
~
シェルのみに知られており、シェルには知られていません。 mkdir
システムコール。
しかし、試してみると:
system("mkdir ~/foo");
これは次のように機能します "mkdir ~/foo"
シェルに渡され、シェルが展開されます ~
に $HOME
を利用したい場合は、 $HOME
と mkdir
, を利用できます。 getenv
次のように機能します:
char path[MAX];
char *home = getenv ("HOME");
if (home != NULL) {
snprintf(path, sizeof(path), "%s/new_dir", home);
// now use path in mkdir
mkdir(path, PERM);
}
他のヒント
~
シェルのメタ文字ではなく、カーネルが提供する「ショートカット」です。
wordexp(3)
のか<のhref = "HTTPを参照してください。 die.net/man/3/glob」のrel = "nofollowをnoreferrer"> glob(3)
のmanページ、あなたは簡単に~
をサポートしたい場合。 (彼らはより多くのあなたが望むより多くを行うことがあります。)
~
は、通常はシェルによって展開されます。あなたが代わりにそれを拡大するための責任があることをシェルの手段を使用していない。
所属していません StackOverflow