Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- JanusWebRTCServer
- PersistenceContext
- 깡돼후
- taint
- kotlin
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- Value too long for column
- VARCHAR (1)
- preemption #
- JanusWebRTCGateway
- python
- table not found
- 코루틴 컨텍스트
- 겨울 부산
- tolerated
- 개성국밥
- 코루틴 빌더
- vfr video
- 오블완
- 티스토리챌린지
- JanusWebRTC
- Spring Batch
- pytest
- 자원부족
- addhooks
- terminal
- mp4fpsmod
- 달인막창
- PytestPluginManager
- JanusGateway
Archives
너와 나의 스토리
리눅스 기반 파일 조작하기 본문
반응형
리눅스는 소켓을 파일의 일종으로 구분한다. 따라서 파일 입출력 함수를 소켓 입출력에, 다시 말해서 네트워크상에서의 데이터 송수신에 사용할 수 있다.
*참고로 윈도우는 리눅스와 달리 파일과 소켓을 구분함.
저 수준 파일 입출력(Low-level File Access)과 파일 디스크립터(File Descriptor)
- 저 수준 파일 입출력:
- ANSI의 표준 함수가 아닌, 운영체제가 제공하는 함수 기반의 파일 입출력
- 표준이 아니기 때문에 운영체제에 대한 호환성이 없다.
- 리눅스는 소켓도 파일로 간주하기 때문에, 저 수준 파일 입출력 함수를 기반으로 소켓 기반의 데이터 송수신이 가능하다.
- 파일 디스크립터
- 시스템으로부터 할당 받은 파일 또는 소켓에 부여된 정수를 의미
- 즉, 운영체제가 만든 파일(소켓)을 구분하기 위한 일종의 숫자
- 저 수준 파일 입출력 함수에게 소켓의 파일 디스크립터를 전달하면, 소켓을 대상으로 입출력을 진행한다.
- 일반적으로파일과 소켓은 생성의 과정을 거쳐야 파일 디스크립터가 할당된다. 반면 아래의 세 가지 입출력 대상은 별도의 생성과정을 거치지 않아도 프로그램이 실행되면 자동으로 할당되는 파일 디스크립터들이다.
파일 디스크립터 | 대상 |
0 | 표준입력 (Standard Input) |
1 | 표준출력 (Standard Output) |
2 | 표준에러 (Standard Error) |
파일 열기
#inlcude <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int flag);
- 인자:
- path: 파일 이름을 나타내는 문자열의 주소 값 전달
- flag: 파일의 오픈 모드 정보 전달
- 반환:
- 성공: 파일 디스크립터 반환 -> 이걸로 나중에 파일 닫음
- 실패: -1 반환
- flag에 전달 할 수 있는 값
파일 닫기
#include <unistd.h>
int close(int fd);
- 인자:
- fd: 닫고자 하는 파일 또는 소켓의 파일 디스크립터 전달
- 반환:
- 성공: 0 반환
- 실패: -1 반환
파일에 데이터 쓰기
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t nbytes);
- 인자:
- fd: 데이터 전송 대상을 나타내는 파일 디스크립터 전달
- buf: 전송할 데이터가 저장된 버퍼의 주소 값 전달
- nbytes: 전송할 데이터의 바이트 수 전달
- 반환:
- 성공: 전달한 바이트 수
- 실패: -1 반환
- primitive 자료형 -> <sts/types.h> 헤더파일에 typedef 선언을 통해서 정의되어 있다
- size_t: unsigned int
- ssize_t: signed int
출처: [열혈 TCP/IP 소켓 프로그래밍]
반응형
'Computer Networks > 실습' 카테고리의 다른 글
주소 할당 에러의 원인 - Time wait과 SO_REUSEADDR 옵션 (0) | 2019.11.08 |
---|---|
[CH.4-2,3] TCP기반 서버, 클리이언트의 구현 - Iterative 기반으로 구현 (0) | 2019.10.09 |
[CH.4-1] TCP와 UDP에 대한 이해 (0) | 2019.10.09 |
[실습] 주소체계와 데이터 정렬 - IP주소/PORT번호/주소정보 표현/인터넷 주소(Internet Address) (0) | 2019.09.25 |
[실습] 네트워크 프로그래밍과 소켓 - 소켓 인터페이스, 서버 클라이언트 연결 (0) | 2019.09.05 |
Comments