Skip to content

Commit e2d4b2c

Browse files
committed
C 프로그래밍 라이브러리
1 parent 0f6e1dd commit e2d4b2c

9 files changed

Lines changed: 236 additions & 0 deletions

File tree

c_programming/libMsg.a

2.19 KB
Binary file not shown.

c_programming/makeMsg.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <stdio.h>
2+
#include "msgType.h"
3+
4+
/*
5+
* 포인터로 들어온 message의 messageType부터 확인을 한다.
6+
*
7+
* 메시지 타입이 REQUEST이면 message 속의 union 데이터 중 requestType 형의
8+
* 스트럭처에 데이터를 세팅한 후 포인터를 리턴한다.
9+
*
10+
* 마찬가지로 RESPONSE 타입인 경우에는 responseType형의 스트럭처를 이용한다.
11+
*
12+
* 만일 둘중 아무 타입도 아니면 0을 리턴한다.
13+
* */
14+
MessageType* setMsg(MessageType *message)
15+
{
16+
if(message->messageType == REQUEST)
17+
{
18+
message->uType.request.reqType = 1;
19+
strcpy(message->uType.request.reqData, "Request.\0");
20+
return message;
21+
}
22+
else if(message->messageType == RESPONSE)
23+
{
24+
message->uType.response.isDone = 1;
25+
strcpy(message->uType.response.resData, "Result 1.Data:3, 2.Number:10...\0");
26+
return message;
27+
}
28+
return 0;
29+
}
30+
31+
/*
32+
* showMsg()는 message 포인터를 인수로 받은 후,
33+
* 내부의 데이터를 화면에 출력한다. 이때도 messageType을 확인한 후
34+
* union 속의 어떤 스트럭처를 활용할지 결정한다.
35+
*
36+
* 확인이 끝나면 해당 스트럭처 속의 데이터를 화면에 출력한다.
37+
* */
38+
void showMsg(MessageType *message)
39+
{
40+
if(message->messageType == REQUEST)
41+
{
42+
printf("Request Type: %d\n", message->uType.request.reqType);
43+
printf("Request Data: %s\n", message->uType.request.reqData);
44+
}
45+
else if(message->messageType == RESPONSE)
46+
{
47+
printf("Response is done: %d\n", message->uType.response.isDone);
48+
printf("Response Data: %s\n", message->uType.response.resData);
49+
}
50+
}

c_programming/makeMsg.c.blog

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<pre class="brush:c">#include &lt;stdio.h&gt;
2+
#include "msgType.h"
3+
4+
/*
5+
* 포인터로 들어온 message의 messageType부터 확인을 한다.
6+
*
7+
* 메시지 타입이 REQUEST이면 message 속의 union 데이터 중 requestType 형의
8+
* 스트럭처에 데이터를 세팅한 후 포인터를 리턴한다.
9+
*
10+
* 마찬가지로 RESPONSE 타입인 경우에는 responseType형의 스트럭처를 이용한다.
11+
*
12+
* 만일 둘중 아무 타입도 아니면 0을 리턴한다.
13+
* */
14+
MessageType* setMsg(MessageType *message)
15+
{
16+
if(message-&gt;messageType = REQUEST)
17+
{
18+
message-&gt;uType.request.reqType = 1;
19+
strcpy(message-&gt;uType.request.reqData, "Request.\0");
20+
return message;
21+
}
22+
else if(message-&gt;messageType == RESPONSE)
23+
{
24+
message-&gt;uType.response.isDone = 1;
25+
strcpy(message-&gt;uType.response.resData, "Result
26+
1.Data:3, 2.Number:10...\0");
27+
return message;
28+
}
29+
return 0;
30+
}
31+
32+
/*
33+
* showMsg()는 message 포인터를 인수로 받은 후,
34+
* 내부의 데이터를 화면에 출력한다. 이때도 messageType을 확인한 후
35+
* union 속의 어떤 스트럭처를 활용할지 결정한다.
36+
*
37+
* 확인이 끝나면 해당 스트럭처 속의 데이터를 화면에 출력한다.
38+
* */
39+
void showMsg(MessageType *message)
40+
{
41+
if(message-&gt;messageType == REQUEST)
42+
{
43+
printf("Request Type: %d\n", message-&gt;uType.request.reqType);
44+
printf("Request Data: %s\n", message-&gt;uType.request.reqData);
45+
}
46+
else if(message-&gt;messageType == RESPONSE)
47+
{
48+
printf("Response is done: %d\n", message-&gt;uType.response.isDone);
49+
printf("Response Data: %s\n", message-&gt;uType.response.resData);
50+
}
51+
}
52+
</pre>

c_programming/makeMsg.o

2.04 KB
Binary file not shown.

c_programming/msgType.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#define REQUEST 1
2+
#define RESPONSE 2
3+
4+
/* request를 담은 스트럭처 */
5+
typedef struct
6+
{
7+
int reqType;
8+
char reqData[10];
9+
} RequestType;
10+
11+
/* response를 담은 스트럭처 */
12+
typedef struct
13+
{
14+
int isDone;
15+
char resData[30];
16+
} ResponseType;
17+
18+
/**
19+
* request 또는 response를 담게될
20+
* message 스트럭쳐
21+
*/
22+
typedef struct
23+
{
24+
/* messageType에 따라 union속의 타입이 결정 */
25+
unsigned int messageType;
26+
// union 타입으로 상황에 따라 RequestType 형의 스트럭처로 활용될 수도 있고
27+
// ResponseType형의 스트럭처로 활용될 수도 있다.
28+
union
29+
{
30+
/* messageType = REQUEST인 경우 */
31+
RequestType request;
32+
/* messageType = RESPONSE인 경우 */
33+
ResponseType response;
34+
} uType;
35+
} MessageType;

c_programming/msgType.h.blog

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<pre class="brush:c">#define REQUEST 1
2+
#define RESPONSE 2
3+
4+
/* request를 담은 스트럭처 */
5+
typedef struct
6+
{
7+
int reqType;
8+
char reqData[10];
9+
} RequestType;
10+
11+
/* response를 담은 스트럭처 */
12+
typedef struct
13+
{
14+
int isDone;
15+
char resData[30];
16+
} ResonseType;
17+
18+
/**
19+
* request 또는 response를 담게될
20+
* message 스트럭쳐
21+
*/
22+
typedef struct
23+
{
24+
/* messageType에 따라 union속의 타입이 결정 */
25+
unsigned int messageType;
26+
// union 타입으로 상황에 따라 RequestType 형의 스트럭처로 활용될 수도 있고
27+
// ResponseType형의 스트럭처로 활용될 수도 있다.
28+
union
29+
{
30+
/* messageType = REQUEST인 경우 */
31+
RequestType request;
32+
/* messageType = RESPONSE인 경우 */
33+
ResponseType response;
34+
} uType;
35+
} MessageType;
36+
</pre>

c_programming/useMsg

8.51 KB
Binary file not shown.

c_programming/useMsg.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <stdio.h>
2+
#include "msgType.h"
3+
4+
int main(int argc, char* argv[])
5+
{
6+
MessageType message;
7+
if(argc < 2)
8+
{
9+
printf("메시지 타입. request:req, response:res\n");
10+
return 0;
11+
}
12+
13+
if(!strncmp(argv[1], "req", 3)) // strncmp: 길이만큼의 문자열 비교
14+
{
15+
printf("input: req\n");
16+
message.messageType = REQUEST;
17+
setMsg(&message);
18+
}
19+
else if(!strncmp(argv[1], "res", 3))
20+
{
21+
printf("input: res\n");
22+
message.messageType = RESPONSE;
23+
setMsg(&message);
24+
}
25+
else
26+
{
27+
printf("Something is wrong!\n");
28+
}
29+
30+
showMsg(&message);
31+
return 0;
32+
}

c_programming/useMsg.c.blog

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<pre class="brush:c">#include &lt;stdio.h&gt;
2+
#include "msgType.h"
3+
4+
int main(int argc, char* argv[])
5+
{
6+
MessageType message;
7+
if(argc &lt; 2)
8+
{
9+
printf("메시지 타입. request:req, response:res\n");
10+
return 0;
11+
}
12+
13+
if(!strncmp(argv[1], "req", 3)) // strncmp: 길이만큼의 문자열 비교
14+
{
15+
message.messageType = REQUEST;
16+
setMsg(&message);
17+
}
18+
else if(!strncmp(argv[1], "res", 3))
19+
{
20+
message.messageType = RESPONSE;
21+
setMsg(&message);
22+
}
23+
else
24+
{
25+
printf("Something is wrong!\n");
26+
}
27+
28+
showMsg(&message);
29+
return 0;
30+
}
31+
</pre>

0 commit comments

Comments
 (0)