C言語システムコール-open
openシステムコール
概要
openはファイル操作のためのファイルディスクリプタ(ファイル記述子)を取得します。
ファイルディスクリプタはint型の数値であり、使用される値は「0」以上の数値となります。
openを実行すると、その時点でプロセスによって使用されていないファイルディスクリプタの最小の値が取得されます。
ファイルディスクリプタをオープンする際には引数flagに動作モードを指定します。
O_RDONLY | 読み込み専用でオープンする。 |
O_WDONLY | 書き込み専用でオープンする。 |
O_RDWR | 読み書き両用でオープンする。 |
O_CREAT | ファイルが存在しない場合には新規作成する。 |
O_EXCL | ファイルが存在しない場合にはエラーとする。 |
O_TRUNC | ファイルサイズを0に切り詰める。 |
O_APPEND | 追記書き込みでオープンする。 |
O_NONBLOCK | ノンブロッキングモードでオープンする。 |
O_NDELAY | O_NONBLOCKと同様、ノンブロッキングモードでオープンする。 |
O_NOCITY | オープンした端末を制御端末にしない。 |
fopen()について
ファイルをオープンする場合には、openシステムコールを直接使用せずにCライブラリのfopen()を用いてバッファリング機能付きでファイル操作をすることが多いといえます。
fopen()のファイルオープンモードとopenの引数の関係は以下の対応となっています。
fopen(path, "r") | open(file, O_RDONLY) |
fopen(path, "r+") | open(file, O_RDWR) |
fopen(path, "w") | open(file, O_WRONLY|O_CREAT|O_TRUNC, 0666) |
fopen(path, "w+") | open(file, O_RDWD|O_CREAT|O_TRUNC, 0666) |
fopen(path, "a") | open(file, O_WRONLY|O_CREAT|O_APPEND, 0666) |
fopen(path, "a+") | open(file, O_RDWR|O_CREAT|O_APPEND, 0666) |
サンプルプログラム
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int
main(void)
{
int fd = 0;
char *path = "./tmp/datatable.lock";
fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0666);
if(fd < 0){
printf("Error: open(%d) %s\n", errno, strerror(errno));
return(-1);
}
if(close(fd) < 0){
printf("Error: close(%d) %s\n", errno, strerror(errno));
return(-1);
}
return(0);
}
関連ページ
- C言語システムコール-open
- C言語システムコール-creat
- C言語システムコール-close
- C言語システムコール-read
- C言語システムコール-write
- C言語システムコール-lseek
- C言語システムコール-truncate
- C言語システムコール-rename
- C言語システムコール-mkdir
- C言語システムコール-rmdir
- C言語システムコール-link
- C言語
- C言語システムコール