728x90
ํ์ผ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ์์ผ ํ๋ก๊ทธ๋จ ๊ตฌํ
- ์ฐ๊ฒฐ ์์ฒญ : ์๋ฒ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐ ์์ฒญ์ ์๋ํด์ ์ฐ๊ฒฐํ๋ค.
- ls ์์ฒญ : ์๋ฒ ํ๋ก๊ทธ๋จ์ ๋ฌธ์์ด ls๋ฅผ ์ ์กํด์ ํ์ผ ๋ชฉ๋ก์ ์์ฒญํ๋ค.
- ๋ฌธ์์ด(ํ์ผ๋ชฉ๋ก) ์ ์ก : ls ์์ฒญ์ ๋ฐ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ ํ์ผ ๋ชฉ๋ก์ ๋ฌธ์์ด๋ก ๋ง๋ฑ๋ฌ์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ์กํ๋ค.
- ํ๋ฉด ์ถ๋ ฅ : ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ์ ์ก๋ฐ์ ๋ฌธ์์ด(ํ์ผ ๋ชฉ๋ก)์ ์์ ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
ํ์ผ ๋ชฉ๋ก ์ฝ์ด ๋ด๊ธฐ
- ํ์ผ ๋ชฉ๋ก์ ์ฝ์ด ๋ด๊ธฐ ์ํด์๋ ํด๋น ์ด์์ฒด์ ๊ฐ ์ฑํํ ํ์ผ ์์คํ ์ ๋ํด์ ์๊ณ ์์ด์ผ ํ๋ค.
- ๋ฆฌ๋ ์ค๋ ์ ๋์ค ๊ณ์ด์ ๊ฒฝ์ฐ ๋๋ ํ ๋ฆฌ๋ ํน์ ํ์ผ๋ก, I-๋ ธ๋ ๋ฒํธ์ ํ์ผ๋ช ์ ์์ ๊ฐ๋ ๊ตฌ์กฐ์ฒด์ ์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋๋ ํ ๋ฆฌ์ ๊ตฌ์กฐ์ฒด์์ I-๋ ธ๋ ๋ฒํธ๋ I-๋ ธ๋๋ฅผ ์ฐพ๋ Index๋ก ์ฌ์ฉ๋๋ค.
- I-๋
ธ๋ ์ ๋ณด
- ํ์ผ ์์ ์ฃผ์ ์ฌ์ฉ์ ID์ ๊ทธ๋ฃน ID
- ์ ๊ทผ ๊ถํ ์ ๋ณด(Protection)
- ํ์ผ ๋ด์ฉ์ด ์ ์ฅ๋ ๋ฌผ๋ฆฌ์ ์ธ ๋์คํฌ์ ๋ฒ์ง
- ํ์ผ ํฌ๊ธฐ
- ์ต๊ทผ์ I-๋ ธ๋ ๋ณ๊ฒฝ ์๊ฐ, ์ต๊ทผ์ ์ด์ฉ ์๊ฐ, ์ต๊ทผ์ ๊ฐฑ์ ์๊ฐ
- ํด๋น ํ์ผ์ด ๋ช ๊ฐ์ผ ใ ฃ๋๋ ํ ๋ฆฌ๋ก๋ถํฐ ์ฐธ์กฐ๋๊ณ ์๋์ง ์ฐธ์กฐ ์
- ํ์ผ ์ ํ(๋๋ ํ ๋ฆฌ, ์ผ๋ฐ ํ์ผ, ํน์ ํ์ผ)
๊ตฌ์กฐ์ฒด
Struct dirent {
long d_ino; // I-๋
ธ๋ ๋ฒํธ
off_t d_off; // offset
unsigned short d_reclen; // ํ์ผ ์ด๋ฆ ๊ธธ์ด
char d_name[NAME_MAX+1]; // ํ์ผ ์ด๋ฆ
ํจ์
#include <dirent.h>
DIR *opendir(const char *dirname);
๋ฐํ ๊ฐ
- ์ฑ๊ณต : ๋๋ ํ ๋ฆฌ ์คํธ๋ฆผ์ ํฌ์ธํฐ
- ์คํจ : NULL
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
๋ฐํ ๊ฐ
- ์ฑ๊ณต : ํ์ผ ์ ๋ณด๊ฐ ๋ด๊ธด dirent ๊ตฌ์กฐ์ฒด
- ์คํจ : NULL
#include <dirent.h>
int closedir(DIR* dp);
๋ฐํ ๊ฐ
- ์ฑ๊ณต : 0
- ์คํจ : -1
ls_server.c
#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<dirent.h>
#define PORT 9222
char err_1[] = "Directory Error";
char rBuffer[BUFSIZ];
int main(void) {
int c_socket, s_socket;
struct sockaddr_in s_addr, c_addr;
int len, length;
int n, i;
char *temp;
DIR *dp;
struct dirent *dir;
// 1. ์์ผ์ ์์ฑ
s_socket = socket(PF_INET, SOCK_STREAM, 0);
/* 2. ์ฐ๊ฒฐ ์์ฒญ์ ๋ฐ์ ์ฃผ์์ ํฌํธ๋ฅผ ๊ฒฐ์
* ํฌํธ ๋ฒํธ 9222์ผ๋ก ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ ์์ฒญ์ ๋ฐ์ ๋ค์ผ ์ ์๋๋ก
* ๊ตฌ์กฐ์ฒด ๋ณ์ s_addr์ ์ฃผ์์ ํฌํธ๋ฅผ ๊ฒฐ์
*/
memset(&s_addr, 0, sizeof(s_addr));
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(PORT);
/* 3. ์์ผ์ ์ฃผ์์ ํฌํธ์ ์ฐ๊ฒฐ
* s_socket์ ๋ณ์ s_addr์ ๋ฐ๋ผ ์ฐ๊ฒฐ
*/
if(bind(s_socket, (struct sockaddr *) &s_addr, sizeof(s_addr)) == -1) {
printf("can not Bind\n");
return -1;
}
/* 4. ์ปค๋์ ๊ฐํต์ ์์ฒญ
* ์์ผ์ผ๋ก ํต์ ์ ํ ์ ์๋๋ก ์ด์์ฒด์ ์ ๊ฐํต์ ์์ฒญ
*/
if(listen(s_socket, 5) == -1){
printf("listen Fail\n");
return -1;
}
// 5. ๋ฌดํ๋ฐ๋ณต
while(1){
// 6. ์ฐ๊ฒฐ ์์ฒญ์ ์์
len = sizeof(c_addr);
c_socket = accept(s_socket, (struct sockaddr *) &c_addr, &len);
// 7. ํ์ผ ๋ชฉ๋ก์ ์ถ๋ ฅ
length =0;
temp = rBuffer;
while((n = read(c_socket, temp, 1)) > 0 ){
if(*temp == '\r') continue;
if(*temp == '\n') break;
if(*temp == '\0') break;
if(length == BUFSIZ) break;
temp++; length++;
}
rBuffer[length] = '\0';
if(!strcmp(rBuffer, "ls")) {
if((dp = opendir(".")) == NULL) {
write(c_socket, err_1, str
} else {
while((dir = readdir(dp))
if(dir->d_ino == 0) continue;
write(c_socket, dir->d_name, strlen(dir->d_name));
write(c_socket, " ", 1);
}
closedir(dp);
}
}
// 8. ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐ์ ์ข
๋ฃ
close(c_socket);
}
// 9. ์๋ฒ๋ฅผ ์ข
๋ฃ
close(s_socket);
}
ls_client.c
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<strings.h>
#define PORT 9222
#define IPADDR "127.0.0.1"
char buffer[BUFSIZ];
int main(){
int c_socket;
struct sockaddr_in c_addr;
int len;
char rcvBuffer[BUFSIZ];
char *temp;
int length =0;
int n;
c_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&c_addr, 0, sizeof(c_addr));
c_addr.sin_addr.s_addr = inet_addr(IPADDR);
c_addr.sin_family = AF_INET;
c_addr.sin_port = htons(PORT);
if(connect(c_socket, (struct sockaddr *) &c_addr, sizeof(c_addr)) == -1){
printf("can't connect\n");
close(c_socket);
return -1;
}
scanf("%s", buffer);
buffer[strlen(buffer)] = '\0';
if((n = write(c_socket, buffer, strlen(buffer)+1)) < 0 ){
printf("write error\n");
exit(-1);
}
temp = rcvBuffer;
while((n = read(c_socket, temp, 1)) > 0 ) {
if(length == BUFSIZ) break;
temp++; length++;
}
rcvBuffer[length] = '\0';
printf("received Data : %s\n", rcvBuffer);
close(c_socket);
}
$ ll
ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํ์ผ ์ถ๋ ฅ
์คํ ํ๋ฉด
'TIL (Today I Learned) > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TCP/IP] ํฌํธ(Port) (0) | 2021.09.11 |
---|---|
[TCP/IP] socketpair ํจ์๋ฅผ ์ด์ฉํ ์์ผ ํ๋ก๊ทธ๋จ์ ๊ตฌํ - ํ๋ก์ธ์ค ํ๋ (0) | 2021.09.11 |
[TCP/IP] hello, world๋ฅผ ์ถ๋ ฅํ๋ ์์ผ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ ํ์ฅ (0) | 2021.09.11 |
[TCP/IP] hello, world๋ฅผ ์ถ๋ ฅํ๋ ์์ผ ํ๋ก๊ทธ๋จ (0) | 2021.09.11 |
[Network] HTTP2 (0) | 2021.09.09 |