[sw정글-북] 📚CSAPP 10장 System-Level I/O

Date:     Updated:

카테고리:

태그:

📚📚CSAPP 10장-System-Level I/O

🚀노션에서 업데이트 된 내용으로 보기

📚CSAPP 10장 <== 클릭

📚CSAPP 10장 <== 클릭

📚CSAPP 10장 <== 클릭

Untitled

❗️출처: 하이애나 블로그

📕start

10장

  • 입출력은 데이터를 복사하는 과정
  • 유닉스 IO를 배워야 하는 이유
    • 다른 시스템 개념을 이해하는데 도움이 됨
    • 때로는 unix I/O 이외에 다른 방법이 없을 수 있다
  • 10.1 Unix I/O
    • 리눅스에서 파일은 파일은 연속된 m개의 바이트이다
    • 파일 읽기, 파일 쓰기, 파일 닫기 등등
    • 파일을 읽으려고 하면…
      • 커널은 식별자(descriptor)을 리턴해줌 (양수 돌려줌)
    • 바이트 오프셋
      • 처음에는 파일의 머리부분에 있음
      • 파일을 읽어들이다 보면 오프셋도 점점 커짐
      • 파일의 크기가 m이라면…오프셋이 m까지 도달하면, 파일을 다 읽은거니까 EOF조건 발동!! 두둥
  • 10.2 File
    • 임의의 데이터를 포함함
      • 커널은 텍스트, 이진파일 그냥 다 같은걸로 봄
    • 디렉토리는 링크들의 배열로 구성되어있음
    • 디렉토리 계층구조

      Untitled

  • 10.3 파일 열기와 닫기
    • 식별자중 가장 낮은 번호, 그래서 3을 쓴다고 함

      Untitled

    • flags인자는 어떻게 프로세스가 파일에 접근하는지를 알려줌
    • 종류
      • O_RDONLY: Reading only
      • O_WRONLY: Writing only
      • O_RDWR: Reading and writing
    • append옵션으로 플래그 여러개 세울 수 있음
      • O_CREAT: 파일 없으면 비어있는 파일을 생성
    • 접근 권한 비트

      Untitled

      • 위에 세개는 owner에 대한것, 그다음3개는 group, 그다음 세개는 다른사람들에 대한 것

        Untitled

      • 이렇게 umask로 권한 빼줌(unmask)

        Untitled

      • 모드 권한, 마스크 권한 따로 관리함(이유는 모름)
      • 연습문제

        Untitled

        • 0,1,2는 사용중이니까…. fd2는 3이 나옴
  • 10.4 파일 읽기와 쓰기
    • read() 함수로 읽어올 때, 에러가 나면 -1 을 리턴한다
      • ( 0은 EOF )
    • 짧은 카운터 리턴
      • 50읽으려고 했는데, 20밖에없음 ⇒ 그래도 잘 찾아서 리턴해줌
      • 짧은카운터 리턴 기능이 있어야 유용한듯
      • 네트워크 지연때문에 짧은 카운터 리턴이 발생할 수 있음
  • 10.5 Robust Reading and Writing with the Rio Package(=RIO-read, write)
    • Rio는 짧은 카운터를 보장하는 이유가…. 네트워크 지원 등 여러가지 현상으로 short(정보가 끝까지 담기지 않음)가 발생해도, 끝가지 읽어냄
    • 10.5.1 버퍼 없는 함수
      • rio_readn rio writen rio_read
      • 30000(3만)
        • text line일 때, 5+1(null) 해서 6바이트
        • 바이너리일 때, short a = 30000; 이라면 short 자료구조상 8바이트
      • 버퍼가 없는경우 바이너리가 효율적이기 때문에 binary를 사용함
        • bianary를 여는 프로그램이 따로 필요함, 하지만 text는 바로 열린다
        • text가 범용성이 좋기 때문에, binary가 아닌 text로 쓴다
    • 10.5.2 버퍼 있는 함수
      • null 문자가 있는지 1바이트씩 움직이면서 판단
      • 🚀🚀🚀🚀🚀 텍스트 있을 때 버퍼 쓰면 됨🚀🚀🚀🚀🚀🚀🚀
    • rio 완벽정리
      • rio_readn 속에 read있음
      • rio_readnb속에 rio_read있음
  • 10.6 Reading File Metadata
    • meta 정보의 정보(마우정!!마우스 우클릭 정보)
    • stat ← 구조체임
      • st_mode ← 구조체임
        • 파일 권한 비트, 파일 타입을 인코딩 하고 있음
      • st_size ← 구조체임
        • 파일 크기를 바이트로 저장하고 있음
      • 요렇게 찍어서 권한 확인 할 수 있음

      Untitled

  • 10.7 Reading Directory Contents
    • opendir 오픈 디렉
      • 경로이름을 받아서 디렉토리를 가리키는 포인터를 리턴
      • opendir('.')
        • 현재 경로 오픈
    • readdir 디렉토리 읽기

      Untitled

      • struct를 리턴함
      • d_ino
        • 인덱싱 노드의 약자임

        Untitled

    • closedir 디렉토리 닫기
  • 10.8 파일 공유
    • descriptor table
      • 개개인의 프로세스가 모두 가진다
      • 본인이 쓰는 파일 본인이 읽는 파일에 대한 식별자를 따로 테이블로 가지고 있음
    • open file table
      • 오픈된 파일들을 저장하는 한개의 테이블이 있음
      • 식별자를 닫으면 엔트리에서 참조 횟수를 감소
        • 3곳에서쓰이고 있으면 3으로 표시하고 0이되면 테이블에서 삭제
    • v-node table
      • 메타데이터가 저장되는 곳이 I-node임
      • Inode 속에…
        • 접근 권한
        • 생성 등 다양한 권한들
      • Inode는 모든 파일이 각자 1개씩 가지고 있음
      • Inode는 바로 접근 가능하지만 Vnode는 커널에서 정보를 요청해야해서 오래걸림
      • 그래서 정보를 따로 가지고 있음
      • 그리고 Vnode는 공유할 정보들에 대한 값을 가지고 있음, 파일 공유 할 때 Inode에 대한 정보는 들어가지 않을듯?
    • 포크되었을 때, 파일접근

      Untitled

    • 10.9 I/O redirection
      • linux> Is > too.txt
        • ls가 현재 위치로 재지정됨
      • #include
      • dup2(old fd, new fd) 이런식으로 복사시킴

        Untitled

      • 이거 이해하면 dup2 이해한 것

        Untitled

    • 10.10 표준 I/O
      • 파일을 열거나 닫고(fopen, fclose )
      • 바이트를 읽거나, 쓰고(fread, fwrite)
      • 스트 링을 읽거나 쓰고(fgets, fputs)
      • 복잡한 포맷을 갖는 I/O를 위한 함수(scanf, printf)
    • 10.11 종합

      Untitled

      • 가능하면 표준 입출력으로 써라
      • 이진파일 할때는… 버퍼 없는거 써라
        • (scanf, rio_readlinb) 쓰지 말아라
      • 네트워크 소켓에서는 Rio써라
      • 제약사항1

        Untitled

        • 매 입력 연산 전에 버퍼를 비우는 방법을 채택하면 제약사항1을 피할 수 있다.
      • 제약사항 2

        Untitled

        • 동일한 오픈소켓 식별자에서 하나는 읽기용, 하나는 쓰기용으로 오픈한다


😵배우면서 깨달은 내용을 정리해 보았습니다. 틀린 것 같은 개념을 아래 댓글에 달아주시면 감사합니다😵

🌜 Thank you for reading it. Please leave your comments below😄

맨 위로 이동하기

swjungle CSAPP 카테고리 내 다른 글 보러가기

댓글 남기기