본문 바로가기
일상,취미

다시 시작하는 TIL8일차

by 진득한진드기 2024. 6. 17.

오늘한일

 

오늘은 코드를 3줄 짜서 멘탈이 나간 날이다.

 

지금 미러링 통신은 제껴두고 좌표에 따른 이벤트를 먼저 구현하려는데 들어오는 좌표가 내가 표시하는 화면에 최적화가 안된다.

 

예를 들어 가져온 화면 좌표 데이터는 [0,0][1234,2345] 이라면 현재 표시되는 화면은 최대 크기는 560,780 이런 식이다.

 

선배에게 물어봤지만 결국 모든 프론트 적인 요소는 그리는 것이라고 말해서 할 수 있다고만 하셨다.

 

이거를 어떻게 처리해야할까.

 

들어오는 데이터에서 필요한 데이터는 뽑았으니 나오는 데이터에서 표현을 어떻게 할지에 문제이다.

 

말로 줄인다고 생기는 과정이 줄어드는 건 아니니.....

 

개인적으로 생각해본 결과는 다음과 같다.

 

1. 필요한 좌표가 들어가있는 리스트를 loop를 돌면서 원소데이터와 원소의 갯수를 파악하여 이벤트를 생성할 객체가 몇개 인지 파악한다.

 

2. 이벤트 생성할 필드를 먼저 깔고 그에 대한 기초적인 이벤트를 구현(예를들어 색깔을 바꾼다던가)

 

3. 이벤트에 따른 어떤 기능을 할 것인지 구현해야한다.

 

일단 2까지 구현하면 3에서도 벽인게 눈에 보인다.

 

2까지 완료하면 각 이벤트마다 필요한 기능이 뭔지 축약해서 문서화 해놔야겠다.

 

퇴근 후 한 공부

네트워크 프로그래밍을 위한 소켓 공부를 시작하게되었다. 미러링 개발을 위한....

 

리눅스나 윈도우 등 운영체제가 만들어질때

리눅스 운영체제가 만들어질때 C언어의 표준함수를 같이 만들지는 않는다.


해당 운영체제에서 사용할 수 있는 라이브러리를 만든다.


결국 C표준함수를 운영체제에서 동작할 수 있게 해주는 것은 컴파일러이다.


컴파일러가 해당 운영체제에서 동작하는 특정 바이너리 코드로 만든다.


그러면 결국


ANSIC

== 라이브러리 == 

 

운영체제

 

식으로 동작하는것이다.

결국 우리는 직접적으로 운영체제에서 제공하는 시스템 프로그램 함수를 호출하여 사용하는 것이다.

 

hello_client.c에서 사용한 것은 운영체제에서 제공하는 함수다.


사용하는 라이브러리는 다 다르지만 소켓 만큼은 똑같다.



저수준 파일 입출력

저수준 이란 말을 그냥 운영체제가 제공하는 이라고 생각하면 된다.


표준이 아니기 떄문에 운영체제에 대한 호환성이 없다.


리눅스는 소켓도 파일로 간주하기 때문에 저 수준 파일 입출력 함수를 기반으로 소켓 기반의 데이터 송수신이 가능하다.

 

파일디스크립터

 

운영체제가 만든 파일(그리고 소켓)을 구분하기 위한 일종의 숫자

 

저 수준 파일 입출력 함수는 입출력을 목적으로 파일 디스크립터를 요구한다.

 

저 수준 파일 입출력 함수에게 소켓의 파일 디스크립터를 전달하면, 소켓을 대상으로 입출력을 진행한다.


사용할 함수는 아래와 같다.


파일 열기

 

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

 

반환 값 = 성공시 파일 디스크립터 실패시 -1
path = 파일 이름을 나타내는 문자열의 주소값 전달

flag = 파일의 오픈 모드 정보 전달

 

오픈 모드에는 

 

O_CREAT  = 필요하면 파일 생성
O_TRUNC = 기존 데이터 전부 삭제
O_APPEND = 기존 데이터 보존, 뒤에 이어서 저장
O_RDONLY = 읽기 전용으로 파일 오픈
O_WRONLY = 쓰기 전용으로 파일 오픈
O_RDWR = 읽기,쓰기 겸용으로 파일 오픈


파일  닫기

 

int close(int fd)


fd = 파일 디스크립터       반환값 = 성공시 0 실패시 -1

 


파일에 데이터 쓰기

 

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


반환 값 = 성공 시 전달한 바이트 수, 실패시 -1

 

fd = 데이터 전송대상 나타내는 파일 디스크립터 전달.

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

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

 

 

파일에 저장된 데이터 읽기


ssize_t read(int fd, void p_buf, size_t nbytes);

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


인자는 write와 같다.

윈도우와 리눅스에는 조금 차이가 있는데

윈도우는 연결되는것 까진 똑같지만 데이터를 주고 받는게 조금씩 다르다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 10일차  (0) 2024.06.19
다시 시작하는 TIL 9일차  (0) 2024.06.18
다시 시작하는 TIL7일차  (1) 2024.06.13
다시 시작하는 TIL6일차  (1) 2024.06.12
다시 시작하는 TIL 5일차  (1) 2024.06.11