12

私が書くとき

mkdir("~/folder1" , 0777);

Linuxでは、ディレクトリの作成に失敗しました。~を拡張されたホームディレクトリに置き換えると、正常に機能します。使用の問題は何~ですか?

ありがとう

4

3 に答える 3

31

~mkdirシステムコールではなく、シェルだけが知っています。

しかし、試してみると:

system("mkdir ~/foo");

これは、"mkdir ~/foo"がシェルに渡され、シェルが展開~されるときに機能します$HOME

$HOMEwithを利用したい場合は、関数を次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);
}
于 2010-09-01T09:28:07.877 に答える
12

~はシェルのメタ文字であり、カーネルが提供する「ショートカット」ではありません。

簡単にサポートしたい場合は、wordexp(3)またはman ページを参照してください。(彼らはあなたが望む以上のことをするかもしれません。)glob(3)~

于 2010-09-01T09:27:12.853 に答える
5

~通常、シェルによって展開されます。シェルを使用しないということは、代わりにそれを展開する責任があることを意味します。

于 2010-09-01T09:26:53.330 に答える