標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.1 |
両方 |
#define_POSIX_SOURCE
#include <unistd.h>
int rmdir(const char *pathname);
ディレクトリー pathname が空であれば、そのディレクトリーを除去します。pathname は、. (ドット) または .. (ドット・ドット) で終わっていてはいけません。
pathname によりシンボリック・リンクが参照 される場合には、シンボリック・リンクの内容により名前を 付けられたファイルまたはディレクトリーに、rmdir() が影響 することはありません。rmdir() は、ファイルまたはサブディレクトリーを依然として含むディレクトリー を除去しません。
XPG4.2 の特殊な動作: pathname がシンボリック・リンクを指している場合には、rmdir() は失敗し、errno に ENOTDIR が設定されます。
現在ディレクトリーをオープンしているプロセスがない場合には、rmdir() はディレクトリーそのものを削除します。ディレクトリーによって占められるスペースが、新規使用のために解放されます。ディレクトリーの除去時に、ディレクトリーがオープンされているプロセスが 1 つ以上ある場合には、ディレクトリーそのものは、最後のプロセスが ディレクトリーをクローズするまで除去されません。最後のリンクが取り除かれた後のディレクトリーのもとでは、たとえこのディレクトリーがまだオープンされていても、新規ファイルを作成することはできません。
rmdir() は、それがプロセスの作業ディレクトリーであっても、そのディレクトリーを削除します。
rmdir() が正常に実行されると、親ディレクトリーの変更内容および 修正回数が更新されます。
正常に実行された場合、rmdir() は 0 を戻します。
⁄* CELEBR16
This example removes a directory.
*⁄
#define _OPEN_SYS
#include <fcntl.h>
#include <sys⁄stat.h>
#include <sys⁄stat.h>
#include <unistd.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main() {
char new_dir[]="new_dir";
char new_file[]="new_dir⁄new_file";
int fd;
if (mkdir(new_dir, S_IRWXU|S_IRGRP|S_IXGRP) != 0)
perror("mkdir() error");
else if ((fd = creat(new_file, S_IWUSR)) < 0)
perror("creat() error");
else {
close(fd);
unlink(new_file);
}
if (rmdir(new_dir) != 0)
perror("rmdir() error");
else
puts("removed!");
}