반응형

분류 전체보기 2934

[리눅스/유닉스 시스템 프로그래밍] dup, dup2

3.6 dup, dup2 리눅스 시스템에서는 열려진 파일의 디스크립터를 복제하는 dup와 dup2 함수를 제공합니다. // ex_dup.c #include "eh.h" int main(int argc,char **argv) { int fd1 = 0, fd2=0; char buf[10+1]=""; if(argc != 2) { fprintf(stderr,"usage: %s [file name]\n",argv[0]); return 1; } fd1= open(argv[1],O_RDONLY); if(fd1 == -1) { fprintf(stderr,"failed open %s\n",argv[1]); return 1; } fd2= dup(fd1); if(fd2 == -1) { perror("failed dup");..

[리눅스/유닉스 시스템 프로그래밍] 파일 테이블과 파일 디스크립터 테이블

3.5 파일 테이블과 파일 디스크립터 테이블 리눅스 시스템에서는 프로세스마다 파일 디스크립터 테이블을 갖고 있습니다. 그리고 파일 디스크립터 테이블에는 open에서 사용한 flags와 파일 테이블 요소의 위치 정보를 포함합니다. 그리고 커널은 모든 열려진 파일들을 관리하는 파일 테이블을 가지고 있습니다. 파일 테이블의 항목 엔트리에는 파일의 상태 flags와 현재 파일의 작업 offset과 파일의 vnode 테이블의 위치 정보를 포함합니다. 그리고 vnode 테이블의 각 항목은 inode 정보와 현재 파일의 크기를 포함합니다. 먼저 하나의 프로세스에서 같은 파일을 두 번 열었을 때를 살펴봅시다. 같은 파일을 두 번 열면 서로 다른 파일 디스크립터를 부여하고 서로 다른 파일 오프셋을 유지합니다. 따라서 프..

[리눅스/유닉스 시스템 프로그래밍] lseek

3.4 lseek 파일 입출력 작업을 할 때 lseek 함수를 이용하여 원하는 위치로 이동할 수 있습니다. 현재 작업하고 있는 파일의 시작 위치에서 상대적 거리를 파일 offset이라 부르며 lseek 함수를 이용하면 파일의 시작 위치나 현재 위치, 파일의 끝에서 상대적 거리로 이동할 수 있습니다. 하지만 FIFO나 pipe처럼 특수한 파일은 lseek를 허용하지 않습니다. //ex_ enable_lseek.c #include #include #include #include int main(int argc,char **argv) { int fd = 0; if(argc != 2) { fprintf(stderr,"usage: %s [filename]\n",argv[0]); return 1; } fd = op..

[리눅스/유닉스 시스템 프로그래밍] read, write

3.3 read, write 파일을 열고 난 후에 데이터를 쓰거나 읽어올 때는 read와 write 함수를 사용합니다. // ex_read_write.c #include #include #include #include #define MAX_TIT_LEN 100 #define MAX_AUT_LEN 20 #define DUMMY_FNAME "dummy" typedef struct _Book Book; struct _Book { char title[MAX_TIT_LEN+1]; char author[MAX_AUT_LEN+1]; int num; }; void TestWrite(); void TestRead(); int main() { TestWrite(); TestRead(); return 0; } void Te..

[리눅스/유닉스 시스템 프로그래밍] open, close

3.2 open, close 파일 입출력 작업을 위해 파일을 열 때 open 함수를 이용하고 작업을 마치고 파일을 닫을 때 close 함수를 이용합니다. //ex_open1.c #include #include #include #include #include int main(int argc,char **argv) { int fd = 0; if(argc != 2) { printf("Usage %s [filename]\n",argv[0]); exit(0); } fd = open(argv[1],O_WRONLY); if(fd

[리눅스/유닉스] 파일 입출력

3. 파일 입출력(File Input/Output) 이번 장에서는 리눅스 시스템에서 제공하는 파일 입출력 시스템 호출에 관한 함수들을 소개합니다. 파일 I/O에 관한 리눅스 시스템 호출로 파일을 열어 데이터를 쓰거나 파일의 내용을 읽어오는 등의 작업을 할 수 있습니다. 대표적인 파일 I/O에 사용하는 시스템 호출에는 open, close, read, write, lseek 함수가 있습니다. 3.1 파일 기술자(File Descriptors) 리눅스 시스템에서는 프로세스가 파일 입출력을 위해 열려진 파일마다 파일 기술자를 참조합니다. 프로세스가 open 함수를 호출하면 리눅스 시스템의 커널에서는 기존의 파일을 열거나 새로운 파일을 생성하여 파일 기술자를 반환합니다. 파일 기술자는 부호가 없는 정수로 하나의..

[리눅스/유닉스 시스템 프로그래밍] 파일 시스템

2. 파일 시스템(File System) 이번 장에서는 파일 시스템을 알아봅시다. 파일 시스템을 이해하는 것은 보다 효과적으로 파일 입출력 작업을 수행할 수 있게 해 줄 것입니다. 그리고 리눅스(유닉스) 시스템을 이해하는 시작점이라 할 수 있습니다. 유닉스 파일 시스템은 4개의 주요 블록으로 구성하고 있습니다. 운영체제를 부팅하기 위해 필요한 부트 블록과 파일 시스템의 크기를 비롯하여 주요 정보를 나타내는 슈퍼블록, 실질적인 파일 정보와 매핑하는 i-node 블록, 마지막으로 실제 데이터를 저장하는 데이터 블록입니다. 이 외에도 파일 시스템에 따라 통계 정보 등을 관리하는 블록이 있습니다. [그림 2.1] 유닉스 파일 시스템의 구조 유닉스 시스템은 파티션마다 독립적인 파일 시스템을 갖습니다. 그리고 최소..

반응형