| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Filtering
- c++
- memory
- Contour
- Gradient
- subpixel
- mfc
- public
- wpf
- aduino
- Binary
- edge
- Read
- Class
- Encapusulation
- Pointer
- Gaussian
- digitalRead
- flutter
- compare
- Android
- Unity
- UNO
- atmega328
- stream
- parameter
- SERIAL
- APP
- sensor
- file access
- Today
- Total
폴크(FOLC)
데이터 공유 방법 ( 다른 PC ) 본문
공유 파일 방식 (Shared File Method)
1. 개요
- 파일을 공유 폴더(네트워크를 통해 접근 가능한 폴더)에 저장하고, 다른 PC가 이를 읽거나 수정하는 방식
- Windows의 SMB (Server Message Block) 프로토콜을 이용해 구현됨
구성 요소
- 공유 폴더 설정: 특정 경로를 공유하도록 설정 (\\192.168.0.101\SharedData)
- 파일 입출력 API: C++에서는 CFile, CStdioFile, 또는 fopen, ifstream 등을 사용
동작 흐름
- PC A가 공유 폴더를 설정하고 data.txt를 만듦
- PC B는 해당 경로를 통해 파일에 접근 (\\PC-A\SharedData\data.txt)
- 두 PC가 파일에 순차적으로 접근하여 데이터 읽기/쓰기
장점
- 구현이 간단하고 직관적
- 파일 내용이 디스크에 영구 저장됨
- 대부분의 언어 및 플랫폼에서 쉽게 접근 가능
단점
- 실시간성이 부족 (파일 변경 시 즉시 반영 X)
- 여러 프로세스가 동시에 접근하면 충돌 가능
- 속도가 느림 (디스크 I/O + 네트워크 지연)
- 보안/권한 설정이 까다로움 (특히 기업 환경에서)
< 예제 코드 >
#include <windows.h>
#include <iostream>
#include <string>
#define SHARED_FILE_PATH L"\\\\192.168.0.101\\SharedFolder\\data.bin"
#define BUFFER_SIZE 256
int main()
{
HANDLE hFile = CreateFileW(
SHARED_FILE_PATH,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
std::wcerr << L"파일 열기 실패! 오류 코드: " << GetLastError() << std::endl;
return 1;
}
// 파일 잠금 (0~BUFFER_SIZE 범위 잠금)
OVERLAPPED ov = { 0 };
if (!LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, BUFFER_SIZE, 0, &ov)) {
std::cerr << "파일 잠금 실패!" << std::endl;
CloseHandle(hFile);
return 1;
}
// 기존 데이터 읽기
char readBuffer[BUFFER_SIZE + 1] = { 0 };
DWORD bytesRead;
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
ReadFile(hFile, readBuffer, BUFFER_SIZE, &bytesRead, NULL);
std::cout << "[읽은 데이터]: " << readBuffer << std::endl;
// 새로운 데이터 쓰기 (덮어쓰기)
std::string writeData = "Updated from PC B";
DWORD bytesWritten;
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
WriteFile(hFile, writeData.c_str(), (DWORD)writeData.size(), &bytesWritten, NULL);
std::cout << "[쓰기 완료]: " << writeData << std::endl;
// 파일 잠금 해제
UnlockFileEx(hFile, 0, BUFFER_SIZE, 0, &ov);
CloseHandle(hFile);
return 0;
}