C

Linux 환경에서 C 언어 기능 액세스 함수(access) 사용법 자세히 알아보기

지오준 2025. 6. 15.
반응형

물론입니다! 아래는 Linux 환경에서 C 언어로 기능 액세스 함수 (function access) 를 사용하는 방법을 샘플 코드와 함께 블로그 형식으로 자세히 설명한 글입니다.


📘 Linux 환경에서 C 언어 기능 액세스 함수(access) 사용법 자세히 알아보기

🧑‍💻 개요

리눅스 환경에서 파일의 존재 유무나 권한(읽기, 쓰기, 실행 가능 여부)을 확인하고 싶을 때, C 언어에서는 access() 함수를 사용할 수 있습니다. 이 함수는 실제로 파일을 열지 않고도 파일 시스템의 메타데이터를 기반으로 권한을 체크할 수 있어 빠르고 유용합니다.

이번 포스팅에서는 access() 함수의 사용법과 예제 코드를 통해 실습해보겠습니다.


🔧 access() 함수란?

access() 함수는 <unistd.h> 헤더 파일에 정의되어 있으며, 파일의 접근 권한을 검사하는 데 사용됩니다.

#include <unistd.h>

int access(const char *pathname, int mode);

📌 매개변수

  • pathname: 접근 권한을 확인할 파일의 경로입니다.
  • mode: 확인하고자 하는 접근 권한을 의미하며, 다음 플래그 중 하나 또는 여러 개를 OR 연산(|)으로 사용할 수 있습니다:
매크로 의미
F_OK 파일 존재 여부 확인
R_OK 읽기 권한 확인
W_OK 쓰기 권한 확인
X_OK 실행 권한 확인

📌 반환값

  • 접근이 허용되면 0을 반환합니다.
  • 실패 시 -1을 반환하며, errno에 오류 원인이 설정됩니다.

💡 사용 예제

다음은 다양한 상황에서 access() 함수를 활용하는 예제입니다.

📄 예제 코드: 파일의 존재와 권한 확인

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main() {
    const char *file_path = "test.txt";

    // 파일 존재 여부 확인
    if (access(file_path, F_OK) == 0) {
        printf("✅ 파일 \"%s\"이 존재합니다.\n", file_path);

        // 읽기 권한 확인
        if (access(file_path, R_OK) == 0) {
            printf("📖 읽기 권한이 있습니다.\n");
        } else {
            printf("❌ 읽기 권한이 없습니다. (%s)\n", strerror(errno));
        }

        // 쓰기 권한 확인
        if (access(file_path, W_OK) == 0) {
            printf("✍️ 쓰기 권한이 있습니다.\n");
        } else {
            printf("❌ 쓰기 권한이 없습니다. (%s)\n", strerror(errno));
        }

        // 실행 권한 확인
        if (access(file_path, X_OK) == 0) {
            printf("🚀 실행 권한이 있습니다.\n");
        } else {
            printf("❌ 실행 권한이 없습니다. (%s)\n", strerror(errno));
        }

    } else {
        printf("🚫 파일 \"%s\"이 존재하지 않습니다. (%s)\n", file_path, strerror(errno));
    }

    return 0;
}

🧪 실행 방법

  1. 위 코드를 access_sample.c라는 이름으로 저장합니다.
  2. 터미널에서 컴파일합니다:
gcc -o access_sample access_sample.c
  1. 테스트용 파일을 생성합니다:
touch test.txt
chmod 644 test.txt
  1. 실행해 봅니다:
./access_sample

🧠 주의사항 및 팁

  • access()현재 사용자(실제 사용자 ID) 기준으로 권한을 검사합니다. setuid 비트는 무시됩니다.
  • 파일의 존재 여부만 확인할 경우 F_OK만으로 충분합니다.
  • 보안상의 이유로 access()의 결과를 기반으로 작업을 진행할 경우, Time-of-check to time-of-use (TOCTOU) 문제를 유의해야 합니다. 예를 들어 access()로 확인 후 open()을 수행하기까지의 사이에 파일 권한이나 존재 여부가 바뀔 수 있습니다.

📚 결론

access() 함수는 리눅스 C 프로그래밍에서 파일의 존재 여부나 권한을 빠르게 확인할 수 있는 간단하면서도 유용한 함수입니다. 파일 작업을 하기 전에 조건을 체크하거나, 유저 입력 기반 경로에 대해 사전 검사를 수행할 때 유용하게 사용할 수 있습니다.


🧪 참고 자료


반응형

댓글