1. 리눅스에서 파일 디스크립터는 소켓에도 해당된다. 소켓을 대상으로 파일 디스크립터를 설명하시오.
파일 디스크립터(File Descriptor)
파일 디스크립터는 시스템으로부터 할당받은 파일 또는 소켓에 부여된 정수를 의미한다.
참고로 C언어를 공부하면서 여러분이 입출력의 대상으로 여겨왔던
표준 입출력 및 표준 에러에도 리눅스에서는 파일 디스크립터를 할당하고 있다.
일반적으로 파일과 소켓은 생성의 과정을 거쳐야 파일 디스크립터가 할당 됩니다.
반면 위에서 보이는 세가지 입출력 대상은 별도의 생성과정을 거치지 않아도
프로그램이 실행되면 자동으로 할당되는 파일 디스크립터들입니다.
2. 다음 소스의 동작을 설명하고, 실행결과는 무엇인가?
( src.dat 파일의 내용은 본인의 학번 이름으로 하고, dst.dat 파일의 내용을 적으시오.)
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 100
int main(int argc, char *argv[])
{
int src, dst;
int read_cnt;
char buf[BUF_SIZE];
src=open("src.dat", O_RDONLY);
dst=open("dst.dat", O_CREAT|O_WRONLY|O_TRUNC);
if(src==-1||dst==-1)
{
puts("file open error");
return -1;
}
while((read_cnt=read(src, buf, BUF_SIZE))!=0)
write(dst, buf, read_cnt);
close(src);
close(dst);
return 0;
}
gcc hello_server.c –o hserver
-> hello_server.c 파일을 컴파일 해서 hserver 라는 이름의 실행파일을 만드는 문장이다.
./hserver
-> 현재 디렉토리에 있는 hserver 라는 이름의 파일을 실행시키는 의미이다.