성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • Boot Code 분석
  • WINAPI
  • MFC
  • 문자열 나누기
  • ARM Reverse Engineering

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.08.30_UNIX_파일I/O_연산 및 함수
UNIX 프로그래밍

2013.08.30_UNIX_파일I/O_연산 및 함수

2013. 8. 30. 14:36


3.1 원자적 연산들

  - 하나의 연산이 여러 단계로 구성되어 있으며 그 단계들 모두가 수행되거나 아니면 하나도 수행되지 않음을 보장될 때, 그러한 연산을 가리켜

    '원자적 연산(atomic operation)' 이라고 부른다.

    예를 들어서 A와 B 라는 사람이 완전히 똑같은 시간에 비행기표를 같은 번호로 인터넷으로 예약을 하였을 때,

    한사람만 예약이 되거나, 중복으로 예약이 되거나 하는 일이 발생하면 안된다. 이때 원자적 연산을 보장받지 못했다. 라고 말할 수 있다.  


    

         - pread , pwrite 함수 


 #include <unistd.h>


 ssize_t pread(int filedes, void *buf, size_t nbytes, off_t offset)                반환값 : 읽은 바이트 수, 파일 끝이면 0, 오류 시 -1


 ssize_t pwrite(int filedes, const void *buf, size_t nbytes, off_t offset)

 ▶ pread 호출은 lseek 호출 후 read 를 호출한 것과 동일한 효과지만, 약간 차이가 있다. pwrite도 마찬가지다.

   - pread의 연산을 도중에 가로챌 수 없다. ( 프로세스가 완료되기 전까지 연산이 도중에 인터럽트 걸리진 않는다.)

   - 파일 포인터가 갱신되지 않는다.

   즉, 원자적 연산을 한다.

 

         

         - dup, dup2 함수


 #include <unistd.h>

 

 int dup(int filedes);


 int dup2(int filedes, int filedes2);                    반환값(둘다) : 성공 시 새 파일 서술자, 오류 시 -1

#include <stdio.h>

#include <unistd.h>

int main()
{
  int ifd;

  write(1,"TEST\n",5);  
  
  ifd = dup(1);

  printf("Since write dup ,ifd = %d\n", ifd);

  write(ifd,"TEST\n",5);  

  
  return 0;
}

 => dup 함수를 이용해서 file descriptor 번호 3번에 write file descriptor 가 ifd 로 복사가 되고, 이를 다시 사용한 소스 




3.2 sync함수, fsync함수, fdatasync함수

  - 디스크 I/O 연산들은 버퍼에 대기열에 등록해두고, 나중에 적당한 시점이 되면 디스크에 기록하게 됨. 이 방식을 '지연된 쓰기(delayed write)' 라고 부른다.


 sync() 

 업데이트가 주기적으로 호출됨. 기록연산이 완료될 때 까지 기다리지 않는다.

 fsync()

 디스크의 쓰기들이 완료될 때 까지 대기했다가 반환된다.

 fdatasync()

 fsync() 와 비슷한데 파일의 자료 부분에만 영향을 미친다. fsync() 는 파일의 자료와 특성까지  동기적으로 갱신한다.



 3.3 fcntl함수

  - 이미 열려있는 파일의 특성들을 변경 할 수 있다(소스상에서). linux 의 경우 chmode이고, 이는 명령어로 그 특성을 변경할 수 있다. 추가설명은 아직 수업이 없었음



저작자표시 (새창열림)

'UNIX 프로그래밍' 카테고리의 다른 글

2013.09.10_UNIX_7.7(DLL)~setjmp,longjmp 함수  (0) 2013.09.10
2013.09.03_정리(수정중)  (0) 2013.09.04
2013.09.04_수정중_  (0) 2013.09.04
2013.09.02_4장 파일과 디렉터리  (0) 2013.09.02
2013.08.29_UNIX 프로그래밍_3장_파일 I/O  (2) 2013.08.29
    'UNIX 프로그래밍' 카테고리의 다른 글
    • 2013.09.03_정리(수정중)
    • 2013.09.04_수정중_
    • 2013.09.02_4장 파일과 디렉터리
    • 2013.08.29_UNIX 프로그래밍_3장_파일 I/O
    성엽이
    성엽이

    티스토리툴바