まずは、オンラインマニュアルを見ます
$ man -a rmdir
##################################################################
RMDIR(1) RMDIR(1)
名前
rmdir - 空のディレクトリを削除する
書式
rmdir [options] directory...
POSIX オプション: [-p]
GNU オプション (簡略形式): [-pv] [--ignore-fail-on-non-empty] [--help] [--version] [--]
説明
rmdir コマンドは空のディレクトリを削除する。
引き数に指定した directory が存在する空のディレクトリでない場合にはエラーになる。
#################################################################
#################################################################
RMDIR(2) Linux Programmer's Manual RMDIR(2)
NAME
rmdir - delete a directory
SYNOPSIS
#include <unistd.h>
int rmdir(const char *pathname);
DESCRIPTION
rmdir() deletes a directory, which must be empty.
RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
#################################################################
マニュアルには第一章と二章の両方にrmdirの項目があることがわかった。
今回は第二章の内容を活用します。
今、カレントディレクトリにtestという空のディレクトリを作ります。
$ mkdir test
このディレクトリを削除するためのコマンドを作成します。
/* myrdir.c */
#include<unistd.h>
int main(void)
{
rmdir("./test");
return 0;
}
これをコンパイルして実行すれば、testディレクトリは削除されます。
次に、このプログラムに、ディレクトリが存在しない時のエラー処理を追加します。
エラーメッセージについては、errnoに格納されるエラー番号をperrorに与えることで表示します。
$ man errno
################################################################
ERRNO(3) Linux Programmer's Manual ERRNO(3)
NAME
errno - number of last error
SYNOPSIS
#include <errno.h>
・・・・・・・・・・・
ENOENT No such file or directory (POSIX.1)
################################################################
$ man -a perror
################################################################
PERROR(3) Linux Programmer's Manual PERROR(3)
NAME
perror - print a system error message
SYNOPSIS
#include <stdio.h>
void perror(const char *s);
#include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;
################################################################
/* errno.c */
#include<stdio.h> /* perrorのプロトタイプ宣言 */
#include<errno.h> /* errnorの変数宣言 */
int main(void)
{
errno = ENOENT;
perror("TEST");
return 0;
}
/*ここまで*/
$ gcc -o errno errno.c
$ ./errno
TEST: No such file or directory
このプログラムを上記のmyrmdirに組み込みます。
/* myrmdir2.c */
#include<unistd.h> /* rmdir */
#include<stdlib.h> /* exit */
#include<stdio.h> /* perror */
int main(void)
{
if(rmdir("test") == -1){
//rmdir()が-1を返した時は、errnoからエラー番号を取得して、
//エラーメッセーを表示して、プログラムを終了する。
perror("myrmdir2");
exit(1);
}
}
$ mkdir test
$ ./myrmdir2
$ ./myrmdir2
myrmdir2: No such file or directory