C++のopen関数の使い方は?
C++ の open() 関数はファイルをオープンし、その後の読み書き操作に使用できるファイルディスクリプタを返します。この関数のプロトタイプは次のとおりです。
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
パラメーターの説明。
- pathname:ファイルを開く為のパス名です。
- flags: ファイルのオープン方法と操作方法を指定するフラグパラメータ
- mode:ファイルのパーミッションを指定するためのオプション引数
open()関数は正の整数で,ファイルディスクリプタを表します。ファイルを開くことが失敗した場合、-1を返し、エラーの種類を示すerrnoグローバル変数を設定します。
次に一般的な flags パラメーターと対応する意味を示します。
- O_RDONLY:ファイルを、読み取り専用モードで開きます。
- 書き込み専用でファイルを開く
- O_RDWR: ファイルを読み書きモードで開く。
- ファイルが存在しない場合、ファイルを作成します。
- ファイルがすでに存在していて書き込み可能であれば、ファイル長を0に切り詰めます。
- ファイルの内容の末尾に追加で書き込む
以下に open() 関数を使用してファイルをオープンして読み書き操作する方法を示す、サンプルコードを記載します:
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("example.txt", O_RDWR | O_CREAT, 0644); // 打开或创建example.txt文件,并以读写方式打开
if (fd == -1) { // 打开文件失败
std::cerr << "Failed to open file" << std::endl;
return 1;
}
char buffer[100];
ssize_t bytesRead = read(fd, buffer, sizeof(buffer)); // 从文件中读取数据
if (bytesRead == -1) { // 读取文件失败
std::cerr << "Failed to read file" << std::endl;
close(fd);
return 1;
}
ssize_t bytesWritten = write(fd, "Hello, World!", 13); // 向文件中写入数据
if (bytesWritten == -1) { // 写入文件失败
std::cerr << "Failed to write file" << std::endl;
close(fd);
return 1;
}
close(fd); // 关闭文件描述符
return 0;
}
上記サンプルでは、open()関数でexample.txtというファイルを開くか作成し、読み書きモードでオープンします。次に、read()関数でファイルからデータを読み出し、そのデータをbufferという配列に格納します。続いて、write()関数でファイルにデータを書き込みます。最後に、close()関数でファイルディスクリプタをクローズします。