제8 장 유 닉 스 시스템 인터페이스

9000 단어 unix
8.1 파일 설명자
UNIX 운영 체제 에 서 는 모든 외곽 장치 (키보드 와 모니터 포함) 가 파일 시스템 의 파일 로 간주 된다.시스템 은 파일 설명 자 를 통 해 파일 을 표시 합 니 다. 표준 입력 은 0 이 고 표준 출력 은 1 이 며 표준 오 류 는 2 입 니 다.
프로그램의 입력/출력 이 재 설정 되 었 을 때 셸 은 파일 설명자 0 과 1 의 기본 할당 을 지정 한 파일 로 변경 합 니 다.
8.2 저급 I/o - read 와 write
read 와 write 는 UNIX 의 두 시스템 호출 입 니 다. 이 두 함수 중 첫 번 째 매개 변 수 는 파일 설명자 이 고 두 번 째 매개 변 수 는 프로그램 에서 읽 거나 쓴 데 이 터 를 저장 하 는 문자 배열 입 니 다. 세 번 째 매개 변 수 는 전송 할 바이트 수 입 니 다.
int read(int fd,char *buf,int n);
int write(int fd,char *buf,int n);

모든 호출 은 실제 전 송 된 바이트 수 를 되 돌려 줍 니 다.파일 을 읽 을 때 함수 의 반환 값 은 요청 한 바이트 수 보다 작 을 수 있 습 니 다. 0 으로 돌아 가면 파일 의 끝 에 이 르 렀 음 을 표시 합 니 다.- 1 로 돌아 가면 어떤 오류 가 발생 했 음 을 나타 낸다.파일 을 쓸 때 반환 값 은 실제 적 으로 기 록 된 바이트 수 입 니 다.반환 값 이 입력 을 요청 한 바이트 수 와 같 지 않 으 면 오류 가 발생 했 음 을 설명 합 니 다.
다음은 read 와 write 로 getchar 를 구성 하 는 두 가지 버 전 입 니 다.
첫 번 째 버 전: 표준 입력 에서 한 문 자 를 읽 을 때마다 버퍼 없 는 입력 을 실현 합 니 다.
#include "syscalls.h"
int getchar(void)
{
    char ch;
    return (read(0,&ch,1))==1?(unsigned char)ch:EOF;
}

두 번 째 버 전: 한 그룹의 문 자 를 읽 을 때마다 한 글자 만 출력 합 니 다.
#include "syscalls.h"
int getchar(void)
{
    static char buf[BUFSIZ];
    static char *bufp=buf;
    static int n;
    if (n==0)
    {
        n=read(0,buf,BUFSIZ);
        bufp=buf;
    }
    return --n>0?(unsigned char)*(--bufp):EOF;
}

8.3 open, cat, close 와 nulink
open 은 C 함수 라 이브 러 리 의 fopen 과 유사 합 니 다. 전자 가 되 돌아 온 파일 설명자 일 뿐 오류 가 발생 하면 되 돌려 줍 니 다 - 1
#include<fcntl.h>
int fd;
int open(char *name,int flag,int perms);
fd=open(name,flag,perm);

그 중 flag 가 있 을 수 있 는 상 태 는 ORDONLY、O_WRONLY、O_RDWR 은 각각 읽 기, 쓰기, 읽 기, 쓰기 방식 을 대표 합 니 다.
open 에서 존재 하지 않 는 파일 을 열 면 오류 가 발생 할 수 있 습 니 다. creat 시스템 을 사용 하여 새로운 파일 을 만 들 거나 기 존 파일 을 덮어 쓸 수 있 습 니 다. 다음 과 같 습 니 다.
int creat(char *name, int perms);
fd = creat(name,perms);

creat 가 파일 을 성공 적 으로 만 들 었 다 면 파일 설명 자 를 되 돌려 줍 니 다. 그렇지 않 으 면 - 1 을 되 돌려 줍 니 다.이 파일 이 존재 한다 면, creat 는 이 파일 의 길 이 를 0 으로 절단 하여 기 존 내용 을 버 리 고, creat 를 사용 하여 존재 하 는 파일 을 만 드 는 데 오류 가 발생 하지 않 습 니 다.
perms 는 권한 을 지정 하 는 데 사 용 됩 니 다. UNIX 파일 시스템 의 모든 파일 은 9 비트 의 권한 정보 에 대응 하기 때문에 3 비트 의 8 진수 로 서로 다른 권한 을 편리 하 게 설명 할 수 있 습 니 다.
함수 close (int fd) 는 파일 설명자 와 열 린 파일 간 의 연결 을 끊 고 다른 파일 에 사용 할 수 있 도록 이 파일 설명 자 를 방출 합 니 다.
함수 unlink (char * name) 는 파일 name 을 파일 시스템 에서 삭제 합 니 다. 표준 라 이브 러 리 함수 reove 에 대응 합 니 다.
8.4 무 작위 접근 - lseek
long lseek(int fd,long offset,int origin);
파일 설명 자 를 fd 로 하 는 파일 의 현재 위 치 를 offset 으로 설정 합 니 다. 그 중에서 offset 은 orgin 이 지정 한 위치 에 비해 다음 작업 은 이 위치 에서 시 작 됩 니 다.origin 의 값 은 0, 1 또는 2 로 각각 offset 을 지정 하여 파일 시작, 현재 위치 또는 파일 끝 부터 계산 할 수 있 습 니 다.
lseek 시스템 호출 은 log 형식의 값 을 되 돌려 줍 니 다. 이 값 은 파일 의 새로운 위 치 를 표시 합 니 다. 오류 가 발생 하면 - 1 을 되 돌려 줍 니 다.
다음 함 수 는 파일 의 임의의 위치 에서 임의의 바이트 수 를 읽 고 읽 은 바이트 수 를 되 돌려 줍 니 다. 오류 가 발생 하면 - 1 을 되 돌려 줍 니 다.
#include "syscalls.h"

/*get  : pos     n   */
int get(int fd,long pos,char *buf,int n)
{
    if((lseek(fd,pos,0))>0)
        return read(fd,buf,n);
    else
        return -1;
}

다음 내용 은 계속...
8.5 인 스 턴 스 - fopen 과 getc 함수 의 실현
8.6 인 스 턴 스 - 대상 목록
8.7 인 스 턴 스 - 저장 할당 프로그램

좋은 웹페이지 즐겨찾기