Skip to content
Snippets Groups Projects
Commit d3d9f644 authored by 희원 전's avatar 희원 전
Browse files

Upload New File

parents
No related branches found
No related tags found
No related merge requests found
# 프로젝트 개요
클라이언트-서버 모델을 이용한 concurrent 파일 서버를 구현한다.
Ubuntu 22.04.1 환경에서 C언어로 구현하였다. 교내 오픈소스SW입문 수업에서 제공하는 ssh 서버를 이용하려 하였으나 이미 타 학우가 fifo를 구현해버려 접근 권한이 막히는 바람에 로컬 환경으로 옮겼다. VS code로 작업하고 gcc를 이용하여 컴파일하였다.
<br>
# 구현 내용
메인 함수에서 named pipe를 생성한다.
클라이언트는 사용자로부터 파일 작업에 대한 입력값을 받는다. 이때 먼저 filename을 받 고 해당 file이 존재하는지 확인한 후 file access type을 받는다. file access type이 r(읽기)이면 읽을 bytes 수를, w(쓰기)이면 데이터 스트링을 입력 받는다. r/w 중 하나가 아닐 경우에는 올바르지 않은 값을 입력하였다는 메시지를 출력한다.
입력을 받을 때 단순 scanf를 사용하면 개행문자까지 다음 인자에 입력되므로 getchar() 한수를 이용해 scanf의 쓰레기 값을 없애주었다.
사용자로부터 입력이 완료되면 클라이언트는 입력값을 한 문자열로 저장한 후 named pipe를 통해 서버에 해당 문자열을 전달한다. 파일 액세스 타입, 파일 이름, 문자 ",", 읽기/쓰기에 따른 해당 값 순으로 저장한다.
서버는 전달된 문자열을 분할하여 옯른 값을 적절한 위치에 재할당하여 사용한다. 맨 처음 값, 즉 파일 액세스 타입을 확인한 후 읽기 작업인 경우, 읽을 바이트 수를 확인하고 해당 파일에서 읽은 데이터를 리턴한다. 반면 쓰기 작업인 경우, 작성할 문구를 확인하고 해당 문구를 다시 덮어씌운 뒤 해달 문구의 byte 수를 리턴한다.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment