⋆ 과제1 : 자신의 컴퓨터의 시스템 자원(CPU, MEM) 사용량을 표시하는 라이브러리를 모듈형식으로 작성하고 make를 이용하여 컴파일 결과를 보이세요.

Makefile------------

all:	cpumem

cpumem:	cpumem	.o	cpu_info.o	mem_info.o

gcc -o	cpumem	cpumem.o	cpu_info.o	mem_info.o

cpumem.o:	cpumem.c

gcc -c cpumem.c

cpu_info.o:	cpu_info.c

gcc -c cpu_info.c

mem_info.o:	mem_info.c

gcc -c mem_info.c

clean:	rm -f cpumem cpumem.o cpu_info.o mem_info.o

cpumem.c

#include <stdio.h>

main(){

cpu_info(); // cpu정보를 보여주는 모듈호출

mem_info(); // memory정보를 보여주는 모듈호출

return;

}

⋆ 과제2 : 자신이 사용하는 컴퓨터가 빅or리틀 엔디언인지를 판단하고,

쏘스에 Endian 16진수를 빅이면 리틀로 리틀이면 빅으로 수정하는 코드를 작성하세요

#include <stdio.h>

int main(){

// 변수선언부

int i = 0x00000001, j; // 리틀, 빅엔디언을 구별하기 위해 쓸 변수i

int Endian = 0x12345678, Exchange; // 다른 Endian방식으로 바꿀 변수 Endian

// 변수에 저장된 Endian의 원래 hex 값 출력

printf("Original = %x\n", Endian);

// 변수 i는 int형 4byte 배열로 나타낼 수 있다 ->  ((char*) &i) [0]

// Little Endian이라면 01 00 00 00 이런식으로 저장되기 때문에

// i의 01 값이 배열 첫번째 인덱스[0]에 저장되어있다면 아래 if연산은 true가 된다.

if(((char *) &i)[0]){

// Little Endian

printf("This system use Little Endian!\n\n");

printf("변수 [Endian]은 메모리에 Little Endian으로 저장됨 : ");

// 메모리에 저장된 순서대로 출력한다.

for (j = 0; j < sizeof(int); j++)

printf("%x ",((char *) & Endian)[j]);

printf("\nBig Endian 방식으로 바꾸어 메모리에 저장함  : ");

// 메모리에 저장된 반대 순서대로(다른 Endian) Exchange에 저장하고 출력

for (j = sizeof(int) - 1; j >= 0; j--){

((char *) & Exchange)[j] = ((char *) & Endian)[j];

printf("%x ",((char *) & Exchange)[j]);

}

printf("\n");

}

else{

// Big Endian

printf("This system use Big Endian!\n\n");

printf("변수 [Endian]은 메모리에 Big Endian으로 저장됨 : ");

// 메모리에 저장된 순서대로 출력한다.

for (j = 0; j < sizeof(int); j++)

printf("%x ",((char *) & Endian)[j]);

printf("\nLittle Endian 방식으로 바꾸어 메모리에 저장함  : ");

// 메모리에 저장된 반대 순서대로(다른 Endian) Exchange에 저장하고 출력

for (j = sizeof(int) - 1; j >= 0; j--){

((char *) & Exchange)[j] = ((char *) & Endian)[j];

printf("%x ",((char *) & Exchange)[j]);

}

printf("\n");

}

}