본문 바로가기

Study/Programming

리눅스 기반의 파일조작함수!

안녕하세요 꼬로미입니다 


이번 포스팅에서는 리눅스를 기반 파일을 조작에 사용되는


파일열기, 파일 닫기, 파일에 저장된 데이터 쓰기와 읽기 4가지의 함수를 알아볼게요


리눅스에서는 소켓을 파일의 일종으로 구분합니다


* 파일 디스크립터 : 시스템으로부터 할당받은 파일 또는 소켓에 부여된 정수




파일열기(open)

데이터를 읽거나 쓰기위해 파일을 여는 함수입니다

두개의 인자 값의 첫번째 인자 값은 파일의 이름 및 경로 정보를 뜻하고

두번째 인자 값은 파일의 오픈 모드 정보를 전달해요

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char *path, int flag);

디스크립터를 반환하며 실패하면 -1을 반환합니다


두번째 인자 값인 파일의 오픈 모드 정보

 오픈 모드

의미 

 O_CREAT 

 필요하면 파일을 생성 

 O_TRUNC 

 기존 데이터 모두 삭제

 O_APPEND

 기존 데이터 보존, 뒤에 이어서 저장

 O_RDONLY

 읽기 전용으로 파일 오픈

 O_WRONLY

 쓰기 전용으로 파일 오픈

 O_RDWR

 읽기, 쓰기 겸용으로 파일 오픈



파일 닫기(close)

파일 사용 후 닫기는 필수적이죠

 #include <unistd.h>

int close(int fd);

닫고자 하는 파일 디스크립터를 전달합니다











파일에 데이터 쓰기(write)

 #include <unistd.h>

ssize_t write(int fd, const void * buf, size_t nbytes);

성공 시 전달한 바이트 수, 실패시 -1

buf = 전송할 데이터가 저장된 버퍼의 주소 값을 전달

nbytes = 전송할 데이터의 바이트 수를 전달



파일에 저장된 데이터 읽기(read)

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t nbytes); 

성공시 수신한 바이트 수( 파일의 끝을 만나면 0), 실패시 -1









파일 디스크립터와 소켓


fd1 = socket함수생성

fd2 = open함수생성

fd3 = socket함수생성

(소켓 2개, 파일 1개 생성)


파일 디스크립터 값 확인

fd1의 파일 디스크립터 값 = 3

fd2의 파일 디스크립터 값 = 4

fd3의 파일 디스크립터 값 = 5

(0,1,2값은 이미 할당되어 있기에 3부터 생성이 되는 것을 알 수 있습니다)







-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


open, close, read, write 함수들은


TCP/IP 프로그래밍의 기초가 되는 함수이니


꼭 기억해둬야겠어요 

읽어주셔서 감사드립니다