[c++] 비동기적 파일 입출력
C++에서는 비동기적 파일 입출력을 위해 std::fstream
를 사용할 수 있습니다. 비동기적 파일 입출력은 파일을 읽고 쓰는 동안 프로그램이 다른 작업을 수행할 수 있게 하는 기술입니다. 이로써 I/O 작업이 느린 경우에도 CPU를 최대한 활용하여 효율적으로 작업할 수 있습니다.
비동기 파일 읽기
비동기적 파일 읽기를 위해서는 std::fstream
의 read
함수를 사용합니다. 아래는 비동기적으로 파일을 읽어오는 예제 코드입니다.
#include <iostream>
#include <fstream>
#include <future>
int main() {
std::ifstream file("input.txt", std::ios::binary);
if (file.is_open()) {
std::vector<char> buffer(100);
// 비동기적으로 파일을 읽어옴
std::future<int> result = std::async(std::launch::async, [&file, &buffer]() {
return file.readsome(buffer.data(), buffer.size());
});
// 다른 작업 수행
// ...
int bytesRead = result.get(); // 비동기 작업 완료까지 대기
if (bytesRead > 0) {
std::cout << "Read " << bytesRead << " bytes from file." << std::endl;
// 버퍼에 있는 데이터 처리
}
} else {
std::cerr << "Failed to open file." << std::endl;
}
return 0;
}
비동기 파일 쓰기
비동기적 파일 쓰기를 위해서는 std::fstream
의 write
함수를 사용합니다. 아래는 비동기적으로 파일을 쓰는 예제 코드입니다.
#include <iostream>
#include <fstream>
#include <future>
int main() {
std::ofstream file("output.txt", std::ios::binary);
if (file.is_open()) {
std::vector<char> data = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd' };
// 비동기적으로 파일에 쓰기
std::future<void> result = std::async(std::launch::async, [&file, &data]() {
file.write(data.data(), data.size());
});
// 다른 작업 수행
// ...
result.get(); // 비동기 작업 완료까지 대기
std::cout << "Data written to file." << std::endl;
} else {
std::cerr << "Failed to open file." << std::endl;
}
return 0;
}
결론
C++의 std::fstream
을 사용하여 비동기적 파일 입출력을 구현할 수 있습니다. 이를 통해 I/O 작업이 CPU 성능에 큰 영향을 미치지 않고 비동기적으로 처리할 수 있습니다.
참고 자료: cppreference.com