System Call : open → <fcntl.h> / read,write → <unistd.h> 필요

종류 함수 파라미터 설명 반환값
System Call int open(const char *filename, int flags, mode_t pmode) filename: 파일 이름flags: 열기 모드pmode: 권한 설정 (선택적) 파일 열기 성공: **정수형 fd (≥ 0)**실패: -1
ssize_t read(int fd, void *buf, size_t size) fd: 파일 디스크립터buf: 데이터를 저장할 버퍼size: 읽을 바이트 수 파일에서 데이터 읽기 성공: 읽은 바이트 수파일 끝: 0실패: -1
ssize_t write(int fd, const void *buf, size_t size) fd: 파일 디스크립터buf: 쓸 데이터가 담긴 버퍼size: 쓸 바이트 수 파일에 데이터 쓰기 성공: 쓴 바이트 수실패: -1
int close(int fd) fd: 파일 디스크립터 파일 닫기 (버퍼 플러시 포함) 성공: 0실패: -1
int lseek(int fd, off_t offset, int origin) fd: 파일 디스크립터 offset: 현위치에서 이동할 크기 origin: 현위치(상수) 파일 위치 이동 성공: **이동된 위치 (바이트 단위)**실패: -1
C Library FILE *fopen(const char *filename, const char *mode) filename: 파일 이름mode: 열기 모드 ("r", "w" 등) 파일 열기 성공: FILE*실패: NULL
size_t fread(void *ptr, size_t size, size_t count, FILE *stream) ptr: 저장할 메모리 버퍼size: 데이터 크기count: 읽을 개수stream: 파일 포인터 파일에서 데이터 읽기 실제 읽은 요소 수 (num 단위)
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream) ptr: 쓸 데이터 버퍼size: 데이터 크기count: 쓸 개수stream: 파일 포인터 파일에 데이터 쓰기 실제 쓴 요소 수 (num 단위)
int fclose(FILE *stream) stream: 파일 포인터 파일 닫기 (버퍼 플러시 포함) 성공: 0실패: EOF (보통 -1)
int fseek(FILE * stream, long offset, int whence) stream: 파일 포인터 offset: 현위치에서 이동할 크기 whence: 현위치(상수) 파일 위치 이동 성공: 0 실패: 비 0 값
long ftell(FILE * stream) stream: 파일 포인터 현재 파일 포인터가 가리키고 있는 위치를 반환함 성공: 현재 파일 포인터 위치 실패: -1

System Call 계열 예시

(※ System Call은 unistd.h, fcntl.h 헤더 포함 필요)

#include <fcntl.h>     // open
#include <unistd.h>    // read, write, close, lseek
#include <stdio.h>     // printf

int main() {
    int fd;
    char buffer[20];

    // 파일 열기 (없으면 생성)
    fd = open("testfile.txt", O_RDWR | O_CREAT, 0644);
    if (fd == -1) {
        printf("open 실패\\n");
        return 1;
    }

    // 파일에 쓰기
    write(fd, "HelloWorld", 10); // 10바이트 쓰기

    // 파일 포인터 위치 이동 (처음으로)
    lseek(fd, 0, SEEK_SET);

    // 파일에서 읽기
    read(fd, buffer, 10);
    buffer[10] = '\\0'; // 문자열 끝 처리
    printf("읽은 내용: %s\\n", buffer);

    // 파일 닫기
    close(fd);

    return 0;
}

실제 호출 예시 값 정리:

함수 예시 값
open `"testfile.txt", O_RDWR
write fd, "HelloWorld", 10
lseek fd, 0, SEEK_SET
read fd, buffer, 10
close fd

C Library 계열 예시

(※ stdio.h 헤더 포함 필요)

#include <stdio.h>

int main() {
    FILE *fp;
    char buffer[20];

    // 파일 열기
    fp = fopen("testfile2.txt", "w+"); // 읽기/쓰기 모드
    if (fp == NULL) {
        printf("fopen 실패\\n");
        return 1;
    }

    // 파일에 쓰기
    fwrite("HelloCWorld", sizeof(char), 11, fp);

    // 파일 포인터 위치 이동 (처음으로)
    fseek(fp, 0, SEEK_SET);

    // 파일에서 읽기
    fread(buffer, sizeof(char), 11, fp);
    buffer[11] = '\\0'; // 문자열 끝 처리
    printf("읽은 내용: %s\\n", buffer);

    // 현재 파일 위치 확인
    long pos = ftell(fp);
    printf("현재 파일 포인터 위치: %ld\\n", pos);

    // 파일 닫기
    fclose(fp);

    return 0;
}

실제 호출 예시 값 정리:

함수 예시 값
fopen "testfile2.txt", "w+"
fwrite "HelloCWorld", sizeof(char), 11, fp
fseek fp, 0, SEEK_SET
fread buffer, sizeof(char), 11, fp
ftell fp
fclose fp

요약 핵심 포인트

구분 예시 값 기억 포인트
open / fopen 파일명과 모드
write / fwrite "버퍼", 크기, 개수, 파일
read / fread 읽을 "버퍼", 크기, 개수, 파일
lseek / fseek 파일포인터, 오프셋(거리), 기준점(SEEK_SET 등)
ftell 파일포인터
close / fclose 파일 디스크립터나 파일포인터