C 86

TCP/IP 소켓 프로그래밍 18장 내용 확인문제

1. 하나의 CPU를 기반으로 어떻게 둘 이상의 프로세스가 동시에 실행되는지 설명해보자. 그리고 그 과정에서 발생하는 컨텍스트 스위칭이 무엇인지도 함께 설명해보자. >CPU의 실행시간을 프로세스가 고속으로 나누기 때문에 둘 이상의 프로세스가 동시에 실행 가능하다. 그리고 컨텍스트 스위칭이란, CPU에 의한 실행의 대상을 변경하는 과정에서 발생하는 준비과정으로써, 이전에 실행되던 프로세스의 데이터를 메모리 공간에서 내리고 이어서 실행될 프로세스의 데이터를 메모리 공간 위에 올리는 작업이다. 2. 쓰레드의 컨텍스트 스위칭이 빠른 이유는 어디에 있는가? 그리고 쓰레드간의 데이터 교환에는 IPC와 같은 별도의 기법이 불필요한 이유는 무엇인가? >쓰레드 각각의 고유 데이터는 프로세스 각각의 고유 데이터보다 크기가..

TCP/IP 소켓 프로그래밍 17장 내용 확인문제

1. select 함수를 기반으로 서버를 구현할 때 코드상에서 확인할 수 있는 단점 두 가지는 무엇인가? >select 함수 호출 이후에 항상 등장하는 모든 파일디스크립터를 대상으로 하는 반복문과 select 함수를 호출할 때마다 인자로 매번 전달해야하는 관찰 대상에 대한 정보들이 단점이다. 2. select 방식이나 epoll 방식이나, 관찰의 대상이 되는 파일 디스크립터의 정보를 함수호출을 통해서 운영체제에게 전달해야 한다. 그렇다면 이들 정보를 운영체제에게 전달하는 이유는 어디에 있는가? >select과 epoll은 파일 디스크립터, 정확히 말하면 소켓변화의 관찰이 요구되는 방식이다. 그런데 소켓은 운영체제에 의해 관리가 된다. 즉, select 방식과 epoll 방식은 절대적으로 운영체제에 의해 ..

명품 C언어 프로젝트 4.6장 연습문제

[1번 문제]/*다음은 우리나에 "작은 별"로 알려진 "Twinkle, twinkle, little star" 가사의 일부분이빈다.가사 부분을 다음과 같이 텍스트 파일(plaintext.txt)로 저장한 다음 Caesar 암호문,단순 전치 암호문, XOR 암호문으로 변환한 텍스트 파일을 생성합니다.*/#include #include #include int main(void){ char str[3][57]; //plain text가 3줄 FILE *fp = fopen("C:\\plaintext.txt", "r"); printf("Caesar 암호문\n"); printf("Plain Text\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 57; j++) {..

TCP/IP 소켓 프로그래밍 16장 내용 확인문제

1. 다음 중 FILE 구조체의 포인터와 파일 디스크립터에 대한 설명으로 옳은 것은? >d. 파일 디스크립터를 기반으로 FILE 구조체의 포인터를 생성하는 것은 가능하다. 그리고 이렇게 생성된 FILE 구조체의 포인터를 이용하면 소켓 기반의 데이터 입출력도 가능하다. *틀린 설명 a. FILE 구조체의 포인터와 마찬가지로 파일 디스크립터도 입력용과 출력용이 나뉜다 ->파일 디스크립터는 입출력 모두 가능하다. b. 파일 디스크립터가 복사되면 동일한 정수 값의 파일 디스크립터가 하나 더 추가되어서 총 두개의 파일 디스크립터로 데이터를 입출력 할 수 있게 된다.->파일 디스크립터가 하나 추가된다 하더라도 프로세스 자체는 하나이기 때문에(fork 함수를 썼을 때와 다른점) 하나의 파일 드스크립터로 데이터를 입출..

명품 C언어 프로젝트 4.5장 연습문제

[1번 문제] /*정수 123에 대해 순열은 다음과 같이 3!=3*2*1=6개가 있습니다.이를 확장하여 입력된 임의의 숫자 n에 대해 순열을 출력하는 프로그램을 작성합니다.단, 같은 숫자는 입력하지 않는다고 가정합니다*/#include void permutation(int *arr, int start); //순열 int main(void){ int arr[3]; for (int i = 0; i = 0; i--) //swap 함수로 Setn[i]와 Setn[n-1]의 위치 바꾼 후 { Swap(&Setn[i], &Setn[n - 1]); //재귀 함수 호출 이용해 과정 반복 Copy[r - 1] = Setn[n - 1]; //그 후 swap 함수 재호출하여 Setn[i]와 Setn[n-1]의 위치 바꿈 P..

TCP/IP 소켓 프로그래밍 15장 내용 확인문제

1. 표준 입출력 함수를 사용했을 때 얻게 되는 장점 두 가지는 무엇인가? 그리고 그 두가지 장점을 얻게 되는 이유는 또 무엇인가? >표준 입출력 함수를 사용할 경우 이식성이 좋고 버퍼링을 통한 성능 향상에 도움이 된다. a. 표준 입출력 함수는 모든 운영체제에서 동작하는 함수들이기 때문에 이식성이 좋아진다. b. 그리고 표준 입출력 함수를 사용하면 소켓의 입출력 버퍼의 앞단계에서 성능의 향상을 목적으로 하는 입출력 버퍼가 하나 더 추가되기 때문에 성능의 향상에 도움이 된다. 2. 표준 출력함수를 이용해서 데이터를 전송하는 경우에는 다음과 같이 생각하는 것은 옳지 않다."fputs 함수호출을 통해서 데이터를 전송하면, 함수가 호출되자마자 데이터의 전송이 시작될 거야!"그렇다면 위와 같은 생각이 옳지 않은..

명품 C언어 프로젝트 4.4장 연습문제

[1번 문제]/* 좌표를 나타내는 부분을 구조체로 정의하여 출력하는 프로그램으로 수정한다 */ #include #include #define PI 3.14 typedef struct _point { int x; int y; }Point; //m[2]를 구조체로 변경 void rotation(Point *p, double result[], double d); double dtor(double degree); int main(void) { Point p = { 2, 1 }; double result[2]; rotation(&p, result, 90); for (int i = 0; i < 2; i++) printf("%4.1f ", result[i]); printf("\n"); return 0; } void ..

TCP/IP 소켓 프로그래밍 10~14장 함수 복습

[리눅스 호출한 프로세스 복사본 생성하는 함수]#include pid_t fork(void);->성공 시 프로세스 ID, 실패 시 -1 반환 *부모 프로세스: fork 함수의 반환 값은 자식 프로세스의 ID*자식 프로세스: fork 함수의 반환 값은 0 [리눅스 종료된 자식 프로세스의 ID 반환하는 함수]#include pid_t wait(int *statloc);->성공 시 종료된 자식 프로세스의 ID, 실패 시 -1 반환 *WIFEXITED: 자식 프로세스가 정상 종료한 경우 '참(true)' 반환한다.*WEXITSTATUS: 자식 프로세스의 전달 값을 반환한다. 예시)if (WIFEXITED(status)) //정상 종료하였는가?{ puts("Normal termination!"); printf("..

명품 C언어 프로젝트 4.3장 연습문제

[1번 문제]/*행과 열의 요소를 바꾸는 전치(transpose) 행렬을 출력하는 함수를 작성하시오*/#include void transpose(int m[][3], int row);void print_matrix(int m[][3], int row_size, int col_size); int main(void){ int m[3][3] = { {3, 8, 6}, { 4, 1, 7 }, { 5, 2, 9 } }; printf("변환 전\n"); print_matrix(m, 3, 3); printf("변환 후\n"); transpose(m, 3); return 0;} void transpose(int m[][3], int row){ int temp[3][3]; for (int i = 0; i < 3; i++..

TCP/IP 소켓 프로그래밍 6~9장 함수 복습

[리눅스 UDP 데이터 송신함수]#include ssize_t sendto(int sock, void *buff, size_t nbytes, int flags, struct sockaddr *to, socklen_t addrlen); *sock:데이터 전송에 사용될 UDP 소켓의 파일 디스크립터를 인자로 전달*buff:전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달*nbytes:전송할 데이터 크기를 바이트 단위로 전달*flags:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달*to:목적지 주소정보를 담고 있는 sockaddr 구조체 변수의 주소 값 전달*addrlen:매개변수 to로 전달된 주소 값의 구조체 변수 크기 전달 [리눅스 UDP 데이터 수신함수]#include ss..