マウント、pid、ユーザネームスペースなどの新しい名前空間でクローン化されたコンテナを実装しています。 /proc
,/sys
および/tmp
mount
システムコールを使用します。マウントシステムコールのsourceキーワードとtargetキーワードで混同されています
if(::mount("proc", "/proc", "proc", 0, NULL)==-1) {
printf("Failed on mount: %s\n", strerror(errno));
return -1;
}
if(::mount("sysfs", "/sys", "sysfs", 0, NULL)==-1) {
printf("Failed on mount: %s\n", strerror(errno));
return -1;
}
if(::mount("tmp", "/tmp", "tmpfs", 0, NULL)==-1) {
printf("Failed on mount: %s\n", strerror(errno));
return -1;
}
はしかし、私は少しmount
に渡される引数リストにsource
フィールドで混乱しています。
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
ソースが正確に何を意味していますか?たとえば、/tmp
をマウントすることは、ソース文字列とは何の関係もないようです。 ::mount(nullptr, "/tmp", "tmpfs", 0, NULL)
を使用しても、新しい名前空間で作成された新しい/tmp
フォルダが表示されます。何か不足していますか?