파일

파일이란?

파일은 데이터를 저장하는 수단을 말하는 추상적인 개념.

파일 시스템

데이터 저장매체에 데이터를 저장하고 관리하는 방법.

디바이스 파일

디바이스 파일이란 입출력 디바이스를 표현하는 특수 파일로 /dev 디렉토리에 저장된다.

  • /dev/console : 시스템 콘솔

  • /dev/tty : 프로세스의 터미널 논리 디바이스

  • /dev/null : null 디바이스로 이 디바이스에 쓰여진 모든 데이터는 사라진다.

  • /dev/zero : 0으로 채워진 파일을 만들 때 사용

저수준 파일 함수

시스템 콜을 통한 접근으로 파일 디스크립터를 사용한다.

파일 디스크립터란 파일 접근에 사용되는 정수 값으로 0(입력), 1(출력), 2(에러)를 의미한다.

#include <fcntl.h>
#include <sys/types.h>
#incldue <sys/stat.h>
 
int open(const char * path, int oflags);
 
int open(const char * path, int oflags, mode_t mode);
  • oflags 는 O_RDONLY, O_WRONLY, O_CREAT등이 있다.

  • mode는 S_IRUSR, S_IWUSR 등이 있다.

#include <unistd.h>
 
int close(int fildes);
#include <unistd.h>
 
size_t read(int fildes, void * buf, size_t nbytes);
#include <unistd.h>
 
size_t write(int fildes, const void * buf, size_t nbytes);

고수준 파일 함수

표준 라이브러리 함수 호출을 통한 접근으로 파일 포인터(file stream 이용)를 사용한다.

#include <sys/stat.h>
 
int mkdir(const char * path, mode_t mode);

디렉토리 생성

#include <unistd.h>
int rmdir(const char * path);

디렉토리 삭제

#include <unistd.h>
int chdir(const char * path);

디렉토리 변경

#include <unistd.h>
char * getcwd(char * buf, size_t size);

현재 디렉토리명 반환

#include <sys/types.h>
#include <dirent.h>
 
DIR * opendir(const char * name);

디렉토리 스트림 생성

 
#include <sys/types.h>
#include <dirent.h>
 
struct dirent * readdir(DIR * dirp);

디렉토리 읽기

#include <sys/types.h>
#include <dirent.h>
 
vodi seekdir(DIR * dirp, long int loc);

디렉토리 엔트리 포인트를 loc 위치로 이동

#include <sys/types/h>
#include <dirent.h>
 
int closedir(DIR * dirp);

디렉토리 스트림 해제

파일 및 디렉토리 판별

#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
 
void printdir(char * dir, int depth) {
  DIR * dp;
  struct dirent * entry;
  struct stat statbuf;
 
  if((dp = opendir(dir)) == NULL) {
    fprintf(stderr, "cannot open directory: %s\n", dir);
  }
 
  chdir(dir);
 
  while((entry = readdir(dp)) != NULL) {
    lstat(entry->d_name, &statbuf);
    if(S_ISDIR(statbuf.st_mode)) {
      if(strcmp(".", entry->d_name) == 0 ||
        strcmp("..", entry->d_name) == 0) continue;
 
      printf("%*s%s\n", depth, "", entry->d_name);
 
      printdir(entry->d_name, depth+4);
    } else {
      printf("%*s%s\n", depth, "", entry->d_name);
    }
  }
 
  chdir("..");
  closedir(dp);
}

설명 :

opendir을 하여 읽기에 성공하였으면 dp NULL이 아닌 값을, 실패하면 NULL 값을 얻는다.

dp에는 해당 디렉토리에 대한 스트림에 대한 정보가 들어있다.

readdir(dp)를 통해 해당 디렉토리에 대한 파일정보를 struct dirent * 구조체인 entry에 넣는다.

lstat은 링크에 대한 정보를 얻는 함수로 entry->d_name이 가리키는 파일 정보를 문자열 배열에다가 저장한다.

S_ISDIR(statbuf.st_mode) 함수로 디렉토리 여부 검사를 한다.

procfs

디바이스 드라이버나 운영체제 커널에 대한 실시간 정보를 제공해주는 특수 파일 시스템이다.

'Operator System > Linux' 카테고리의 다른 글

쉘 프로그래밍 간단한 문법  (0) 2017.10.26
프로세스와 생성방법  (0) 2017.10.26
Make  (0) 2017.10.26
Compile과 라이브러리  (0) 2017.10.26
환경변수  (0) 2017.10.26

+ Recent posts