반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
Archives
Today
Total
관리 메뉴

폴크(FOLC)

데이터 공유 방법 ( 다른 PC ) 본문

카테고리 없음

데이터 공유 방법 ( 다른 PC )

folcjin 2025. 5. 11. 20:44
728x90
반응형

공유 파일 방식 (Shared File Method)

1. 개요

  • 파일을 공유 폴더(네트워크를 통해 접근 가능한 폴더)에 저장하고, 다른 PC가 이를 읽거나 수정하는 방식
  • Windows의 SMB (Server Message Block) 프로토콜을 이용해 구현됨

구성 요소

  • 공유 폴더 설정: 특정 경로를 공유하도록 설정 (\\192.168.0.101\SharedData)
  • 파일 입출력 API: C++에서는 CFile, CStdioFile, 또는 fopen, ifstream 등을 사용

동작 흐름

  1. PC A가 공유 폴더를 설정하고 data.txt를 만듦
  2. PC B는 해당 경로를 통해 파일에 접근 (\\PC-A\SharedData\data.txt)
  3. 두 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;
}

728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --