2015/02

    [파일입출력] 6. 파일 안의 데이터 잘라내기

    [파일입출력] 6. 파일 안의 데이터 잘라내기

    파일입출력을 사용함녀 파일을 열고 읽고 쓰며, 오프셋을 변화시키며 작업을 하게 됩니다.이때 원하는 파일을 잘라내고 싶을 때가 있습니다. 그 때 사용하는 시스템 콜을 알아보겠습니다. 리눅스에서 특정한 파일을 잘라내기 위한 시스템 콜이 있습니다. 총 2가지인데요,그 주인공은 truncate() 시스템 콜과 ftruncate() 시스템 콜입니다. 두 시스템의 공통점은 특정 파일의 데이터를 잘라 낸다는데 있습니다. 그럼 차이점이 뭘까요?truncate()시스템 콜은 파일의 경로를 이용해서, ftuncate() 시스템 콜은 파일 디스크립터를이용해서 파일의 데이터를 잘라 낸다는 것입니다. 두 함수를 한번 알아보겠습니다.먼저, ftruncate() 시스템 콜입니다. #include #include int ftrunc..

    [파일입출력] 5. lseek()으로 파일 탐색하기

    [파일입출력] 5. lseek()으로 파일 탐색하기

    파일을 열어 이젠 원하는 위치로 자연스럽게 파일의 위치(?), 커서(?)를 lseek() 시스템 콜을 이용하여 이동해보겠습니다. 시스템 프로그래밍을 하다보면 어떤 경우 파일의 내가 원하는 위치로 커서를 이동시키고 싶은 경우가 있습니다. 그럴 때 자주 사용되는데요, lseek()이란 시스템 콜을 이용하면 된답니다. #include #include off_t lseek (int fd, off_t pos, int origin) 입력 인자 int fdopen() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 off_t pos 파일에 이동할 위치 지정 originlseek() 시스템 콜에 인자(아래 표 참고) 반환값 off_t파일 쓰기 성공 : 파일의 새로운 오프셋 파일 쓰기 실패 : -1 위의 내용을 보면 ..

    [LinuxCommand] chmod

    chmod 명령어는 파일의 접근 권한을 변경하기 위해 사용된다.문법은 아래와 같다. chmod ugo+rwx filename 위의 표현은 아래와 같습니다. u User : 사용자 g Group : 파일 사용 그룹 o Others : 사용자와 그룹 외 모든 계정 + 권한 추가 - 권한 제거 = 현재 권한에 덮어씌우기 r 읽기 권한 w 쓰기 권한 x 실행 권한 위의 내용을 토대로 예를 들어보면, chmod u+r file file을 사용자가 읽게 할 수 있도록 권한을 추가한다. chmod go-x file file을 그룹과 그 외 계정에서 실행하지 못하도록 실행 권한을 제거 한다. chmod ugo=rxw User, Group, Others 모두에게 파일을 읽고 쓰기 실행할 수 있는 권한을 부여한다. 그 외..

    [파일입출력] 4. 동기식 입출력

    입출력을 동기화하는 것은 분명 중요합니다. 하지만, 그 문제를 너무 확대 해석하고 크게 신경 쓸 필요는 없습니다. 요즘의 운영체제들은 버퍼를 통한 지연된 쓰기 작업을 구현하고 있습니다. 그렇기에 앞에 write() 시스템 콜 이용 시 주의해야 될 사항들을 그렇게 신경쓰지 않으셔도 됩니다. 하지만, 개발을 하다보면 개발자가 직접 데이터가 디스크에 기록되는 시점을 제어하고 싶을 때가 있습니다. 이런 상황에 맞춘 몇몇의 시스템 콜을 확인해 보겠습니다. 1. fsync() 시스템 콜과 fdatasync() 시스템 콜 첫 번째는 fsync() 시스템 콜과 fdatasync() 시스템 콜입니다. 먼저, fsync() 시스템 콜에 대해 알아보겠습니다. #include int fsync (int fd) 입력인자 int..

    [파일입출력] 3. write()로 파일에 쓰기

    [파일입출력] 3. write()로 파일에 쓰기

    지난번에 read() 리눅스 시스템 콜을 이용하여 파일에 데이터를 써보았다면, 이번에는 리눅스 시스템 콜 중 write()를 이용하여 파일에 데이터를 써보도록 하겠습니다. write()는 보자마자 아시듯이 read()의 반대 개념입니다. read()와 동일하게 파일디스크립터를 이용하여 참조한 파일에 데이터를 씁니다. 먼저, write() 시스템 콜의 원형과 인자를 확인해 봅시다. #include ssize_t write (int fd, void *buf, size_t len) 입력 인자 int fd open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 void* buf 파일에 쓸 데이터를 저장하고 있는 메모리 공간 len 파일에 쓸 데이터의 길이 반환값 ssize_t 파일 쓰기 성공 : writ..

    [파일입출력] 2. read()로 파일 읽기

    [파일입출력] 2. read()로 파일 읽기

    지난 번 파일을 열었다면, 이번엔 열려있는 파일을 읽어보겠습니다. 가장 대표적인 저수준 파일 입출력에서는 POSIX에 정의된 read() 시스템 콜을 사용하여 파일을 읽어 들이는데요, 파일 오픈 시 사용했던 파일 디스크립터 기억나시나요? fd가 참조하는 파일의 오프셋에서 len 바이트만큼 buf로 읽어 들이게 됩니다. 먼저, read() 시스템 콜의 원형과 인자를 확인해 봅시다. #include ssize_t read (int fd, void *buf, size_t len) 입력 인자 int fd open() 시스템 콜로 열린 파일을 가리키는 파일 지정 번호 void* buf 파일에서 읽은 데이터를 저장할 메모리 공간 len 읽을 데이터의 크기(Byte 단위) 반환값 ssize_t 파일 읽기 성공 : 0..