파일 다루기

ggyu_55·2023년 9월 11일
0

리눅스에서는 일반 파일뿐만 아니라 장치, IPC, 소켓 등도 파일로 간주하여 동일한 인터페이스로 다룬다...! 이러한 개념은 모든 것은 파일이라는 유닉스 철학에서 비롯되었다.


파일 디스크립터(File Descriptor)

파일 디스크립터는 운영체제로부터 파일에 대한 접근 권한을 부여받는 식별자이다.

  • 특징
    • 파일, 입출력장치, 파이프, 소켓 등을 식별한다.
    • 일반적으로 0 이상의 정수 형태로 할당된다.
    • 고정된 파일 디스크립터 값:
      • 0번: 표준 입력
      • 1번: 표준 출력
      • 2번: 표준 에러

파일 열기

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

Parameter

  • pathname : 파일 경로
  • flag : 접근 플래그, 파일을 어떻게 다룰 것인가 (예: O_RDONLY, O_WRONLY 등)
  • mode : 파일 생성시 모드, (소유자 | 그룹 | Other 에 대한 권한 설정)

Return

  • 성공시 파일 디스크립터 반환
  • 실패시 -1 반환

파일 닫기

int close(int fd);

Parameter

  • fd : 닫고자하는 파일 디스크립터

Return

  • 성공시 0 반환
  • 실패시 -1 반환

파일 디스크립터에서 파일 포인터 얻기

FILE *fdopen(int fd, const char *mode);

Parameter

  • fd : 파일 디스크립터
  • mode : 권한 지정

Return

  • 성공시 파일포인터 반환
  • 실패시 NULL 반환

Java의 파일 디스크립터

Java에서는 java.io.FileDescriptor 클래스를 통해 파일 디스크립터에 접근한다.

import java.io.*;

public class FileDescriptorExample {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("example.txt");
        FileDescriptor fd = fos.getFD();
        fos.close();
    }
}
  • 특징
    • Java의 스트림 객체들은 내부적으로 FileDescriptor를 사용한다.
    • 직접적인 생성은 불가능하며, FileInputStream, FileOutputStream 등을 통해 얻는다.
    • 표준 디스크립터는 in, out, err로 표현된다.

파일 포인터(File Pointer)

C 언어에서 파일을 고수준에서 다루기 위한 자료형이다.

파일 열기

FILE *fopen(const char *pathname, const char *mode);

Parameter

  • pathname : 파일 경로
  • mode : 파일 열기 모드 지정 (예: "r", "w", "a" 등)

Return

  • 성공시 파일포인터 반환
  • 실패시 NULL 반환

파일 닫기

FILE *fclose(FILE *stream);

Parameter

  • stream : 닫고자하는 파일 포인터

Return

  • 성공시 0 반환
  • 실패시 EOF 반환

파일 포인터에서 파일 디스크립터 얻기

int fileno(FILE *stream);

Parameter

  • stream : 파일 포인터

Return

  • 성공시 파일 디스크립터 반환
  • 실패시 -1 반환

요약: 파일 디스크립터와 파일 포인터

  1. 파일 디스크립터(File Descriptor)

    • 리눅스에서 파일을 식별하는 유니크한 번호.
    • 0번(표준 입력), 1번(표준 출력), 2번(표준 에러)는 고정된 파일 디스크립터 값이다.
    • open 함수로 파일을 열면 파일 디스크립터 반환, close 함수로 닫을 수 있다.
  2. 파일 포인터(FILE Pointer)

    • C 언어의 FILE 포인터는 파일 스트림을 나타내며, 더 높은 수준의 파일 작업을 지원한다.
    • fopen 함수로 파일을 열 수 있고, fclose로 닫을 수 있다.
    • fdopen을 사용해 파일 디스크립터에서 파일 포인터를 반환받을 수 있고, fileno를 사용해 파일 포인터에서 파일 디스크립터를 반환받을 수 있다.

파일 입력

파일 출력

디렉터리 다루기

하드링크와 심볼릭 링크

파일 속성 다루기

0개의 댓글