본문 바로가기

728x90
반응형

C언어

(59)
[시스템 소프트웨어/C언어] 파일의 유형 확인 파일의 유형 주로 파일의 유형에는 Regular file, Directory file, Device file, FIFO, Socket 등이 있다. - Regular fileBinary or text file - Directory fileA file that contains the names and locations of other files - Device file - Character special and block special files (문자 장치 파일과 블록 장치 파일)- Character soecial file (문자 장치 파일)데이터를 바이트 단위로 전송하는 장치ex) terminal, mouse, keyboard etc.- block sepcial file데이터를 블록 단위로 전송하는 장치..
[시스템 소프트웨어] User Mode, Kernal Mode, System Call User Mode 유저모드는 일반 사용자 애플리케이션이 실행되는 모드로, 제한된 권한을 가지고 있다. 즉, 프로세스는 직접 하드웨어 자원에 접근할 수 없고, 반드시 커널을 통해서만 하드웨어 자원에 접근해야 한다.  이는 보안과 안정성을 유지하기 위함인데, 유저모드는 잘못된 프로그램 실행이나 메모리 침범 등이 다른 프로그램이나 커널에 영향을 미치지 않도록 보호하는 역할을 한다.    Kernal Mode  커널모드는 운영 체제의 핵심 부분인 커널이 실행되는 모드로, 전체 시스템 자원에 대한 완전한 권한을 가지고 있다. 이 모드에서는 하드웨어 자원에 직접 접근하고 제어할 수 있다.  커널모드는 위험성을 내포하고 있는데 커널모드에서의 잘못된 작업은 시스템 전체에 영향을 미칠 수 있으며, 시스템이 불안정해지거나..
[시스템 소프트웨어/C언어] stat(), fstat() stat()과 fstat() stat()과 fstat() 모두 파일의 정보를 가져오는 함수이지만 파일 접근 방식에 차이가 있다. 두 함수 모두 에 정의되어 있다.    stat() stat()의 시그니처는 아래 코드와 같다. int stat(const char* pathname, struct stat* statbuf); stat()은 pathname으로 파일의 경로를 입력받아 이것을 바탕으로 파일의 정보를 불러온다. 또한 stat()은 파일의 경로만 있으면 파일에 접근할 수 있기 때문에 파일이 열려있지 않아도 사용이 가능하다. stat 구조체 포인터 타입의 변수도 인자로 요구하는데 불러온 데이터를 해당 포인터가 가리키는 위치에 저장한다.    fstat() fstat()의 시그니처는 아래 코드와 같다. ..
[시스템 소프트웨어/C언어] lseek, 파일 오프셋 변경 (파일 작업 위치 변경) lseek() lseek() 함수는 파일의 current file offset (현재 파일의 작업 위치)를 변경하는 역할을 한다. lseek()는 에 정의되어 있으며 시그니처는 아래 코드와 같다. off_t lseek(int fd, off_t offset, int whence); fd는 변경할 파일의 디스크립터, offset은 움직일 오프셋의 크기, whence는 기준점이 되는 오프셋을 의미한다.  whence에 들어갈 수 있는 값들은 아래와 같으며 이는 에 정의되어 있다. #define SEEK_SET 0#define SEEK_CUR 1#define SEEK_END 2 SEEK_SET으로 설정하면 기준이 파일의 처음, 즉 파일 오프셋은 0으로 설정된다.SEEK_CUR로 설정하면 기준이 현재 작업 중인 ..
[C언어] perror, errno, exit errno errno는 에 정의되어 있는 정수형 변수이다. 만약 에러가 발생하게 되면 에러의 종류에 맞는 정수가 errno에 들어가게 된다. 즉, errno는 마지막으로 발생한 에러 코드라고 할 수 있다.      perror() 에 정의되어 있는 함수로 에러 메시지를 출력하는 데 사용된다. perror()의 시그니처는 아래 코드와 같다.void perror(const char* s); perror()은 입력받은 문자열을 출력하고 그 문자열에 덧붙여서 errno의 정수값을 기반으로 한 에러 메시지를 출력한다.     exit() 에 정의되어 있는 함수로 프로그램을 종료하는 역할을 한다. exit()의 시그니처는 아래 코드와 같다. void exit(int status);  0을 전달받았을 경우 정상종료를..
[C언어] 파일 입출력 (open, close, write, read) open()과 fopen()의 차이 open()과 fopen() 모두 파일을 열기 위해 사용되지만 그 용도와 기능적인 측면에서 몇 가지 차이점이 있다.  - open() open()의 경우 Unix 및 Unix 계열 운영 체제의 시스템 호출이다. 이 함수는 저수준 파일 입출력을 제공하며 POSIX 호환 운영 체제에서 사용된다.  - fopen() fopen() 함수는 C 표준 라이브러리에 포함된 고수준 함수이다. 이 함수는 플랫폼에 독립적인 방식으로 파일 입출력을 제공하며 이식성이 높은 코드를 작성할 때 주로 사용된다. fopen 함수와 관련해서는 아래 링크에서 설명했었으니 이번에는 open에 대해서 주로 다뤄보겠다. https://enchupin.tistory.com/86      open, close..
[시스템 소프트웨어] File Sharing (file offset) File Sharing int fd1 = open("a.txt", O_RDONLY);int fd2 = open("a.txt", O_RDONLY); 위 코드처럼 하나의 파일을 두 번 연속 열게 되면 file offset은 어떻게 될까? 파일을 열게 되면 디스크(저장장치)에서 파일의 메타데이터를 불러와서 V-node Table에서 관리한다고 했었다. 다시 한번 열게 되더라도 메모리 상에는 이미 파일의 메타데이터가 올라와있기 때문에 그 데이터를 그대로 사용한다.따라서 V-node Table에 파일의 메타데이터는 한 번만 올라오게 된다. 이후 Open File Entry가 생성되는데 이것은 파일을 열 때마다 생성되기 때문에 파일을 두 번 열었을 경우 Open File Entry는 두 개 생성된다. 이 두 개의 ..
[시스템 소프트웨어] 메타 데이터, inode, 파일 디스크립터 메타 데이터 (Meta Data) 메타 데이터는 다른 데이터를 설명하고 분류하는데 도움을 주는 데이터를 의미한다. 문서 파일의 경우에는 제목, 작성자, 생성 날짜, 수정 날짜, 파일 크기 등의 정보를 포함한다고 할 수 있고음악 파일의 경우 아티스트 이름, 앨범 이름, 녹음 연도, 장르 등의 정보를 포함한다고 할 수 있다. stat 구조체에서는 다음과 같은 메타데이터가 포함되어 있다. #include struct stat { dev_t st_dev; // 파일이 위치한 장치의 ID ino_t st_ino; // 파일의 아이노드 번호 mode_t st_mode; // 파일의 타입과 권한 nlink_t st_nlink; // 하드 링크 수 ..

728x90
반응형