UNIX Read , Write

난1렙이요·2024년 10월 14일
0

시스템 프로그래밍

목록 보기
11/22

File descriptor

  • 오픈된 파일에 대해서 접근할 수 있는 접근자이다.
  • 프로그램이 shell에서 실행되면, 다음 3가지가 자동으로 실행된다. 이것들은 표준 입출력장치이다.
  • STDIN_FILENO
    • 표준 입력장치
    • 키보드에 동치된다
    • 0번으로 정의되어 있다
  • STDOUT_FILENO
    • 표준 출력장치
    • 스크린에 동치된다
    • 1번으로 정의되어 있다
  • STDERR_FILENO
    • 표준 에러장치
    • 주로 우선순위가 높은 에러 메세지같은 것들을 출력한다
    • 2번으로 정의되어 있다

File Offset

  • 이 파일에서 다음에 I/O를 수행할 위치를 나타내는 것이다.
  • 처음에 파일이 Open되면 맨 처음(0byte)이 file offset의 값이 된다.
  • Read와 Write는 현재 file offset값에서부터 수행된다.
  • file offset은 Read와 Write 후에 자동으로 변경된다.

Reading

  • Unix는 read와 write 함수를 통해서 다른 디바이스에서 값을 읽어오거나 입력할 수 있다.
#include <unistd.h>
ssize_t read(int fildes, void* buf, size_t nbyte);
  • file descriptor : open함수는 지정된 경로의 파일을 열어준다. 이 파일에 접근할 수 있는 값을 말한다. 커널이 오픈된 파일에 접근 가능케 하는 지시자라고 생각하면 된다.
  • buffer : char buf[]로 만들어진 char형 배열을 먼저 만들어야 한다. 이 배열의 포인터 값을 넘겨주어 배열에 값을 저장한다.
  • nbyte : 숫자만큼 결과값을 읽어온다.
  • ssize_t는 signed integer 데이터
  • size_t는 unsigned integer 데이터

Return value

  • 만약 성공적으로 수행되면 실제로 읽어들인 byte 수만큼 return이 된다.
  • 에러가 나면 -1을 return한다.
  • 요청한 바이트 수보다 적은 바이트 수가 return될 수 있다.
    • 파일의 크기가 클 때, 적당한 크기의 배열을 마련해놓고 특정 byte씩 읽는 역할을 수행할 수 있다. 이를 통해 파일이 끝나는 위치(EOF)를 파악할 수 있다.
  • 파일이 끝나는 위치(EOF)에서 다시 수행하면 0을 return한다.

Writing

  • Unix는 read와 write 함수를 통해서 다른 디바이스에서 값을 읽어오거나 입력할 수 있다.
#include <unistd.h>
ssize_t write(int fildes, const void* buf, size_t nbyte);
  • file descriptor : open함수는 지정된 경로의 파일을 열어준다. 이 파일에 접근할 수 있는 값을 말한다. 커널이 오픈된 파일에 접근 가능케 하는 지시자라고 생각하면 된다.
  • buffer : char buf[]로 만들어진 char형 배열을 먼저 만들어야 한다. 이 배열의 포인터 값을 넘겨주어 배열에서 값을 읽어온다.
  • nbyte : 숫자만큼 결과값을 읽어온다.
  • ssize_t는 signed integer 데이터
  • size_t는 unsigned integer 데이터

Return value

  • 만약 성공적으로 수행되면 실제로 읽어들인 byte 수만큼 return이 된다.
  • 에러가 나면 -1을 return한다.
  • 요청한 바이트 수보다 적은 바이트 수가 return될 수 있다.
    • 파일의 크기가 클 때, 적당한 크기의 배열을 마련해놓고 특정 byte씩 읽는 역할을 수행할 수 있다. 이를 통해 파일이 끝나는 위치(EOF)를 파악할 수 있다.
  • 파일이 끝나는 위치(EOF)에서 다시 수행하면 0을 return한다.

File descriptor

  • 오픈된 파일에 대해서 접근할 수 있는 접근자이다.
  • 프로그램이 shell에서 실행되면, 다음 3가지가 자동으로 실행된다. 이것들은 표준 입출력장치이다.
  • STDIN_FILENO
    • 표준 입력장치
    • 키보드에 동치된다
    • 0번으로 정의되어 있다
  • STDOUT_FILENO
    • 표준 출력장치
    • 스크린에 동치된다
    • 1번으로 정의되어 있다
  • STDERR_FILENO
    • 표준 에러장치
    • 주로 우선순위가 높은 에러 메세지같은 것들을 출력한다
    • 2번으로 정의되어 있다
profile
다크 모드의 노예

0개의 댓글