본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]이수란_20110707_struct & TCPechoClient

by 알 수 없는 사용자 2011. 7. 7.
728x90
반응형
구조체  (struct)
- 의미상으로 연관된, 다른 자료형의 데이터를 묶은, 사용자 정의 자료형
               (cf. 배열 - 같은 자료형 묶음)
  보통 main 함수 밖에 정의 하여, 다른 함수에서도 사용할 수 있게 정의함.
  구조체 원형의 정의에서는 메모리가 할당 되지 않고, 변수선언시 메모리 할당됨
  독립적으로 사용되기보다 구조체의 배열이나, 연결리스트의 노드로 사용

-구조체 사용

① 구조체 정의
_구조체 정의 후 변수 선언_
struct student                          // 구조체 원형 정의  (  struct 구조체명(tag) {  )
{
char name[20] ;             // 구성요소(멤버 - name[],english, math )
int english ;                 
int math ;
} ;
struct student st;        // struct student로 변수선언  ( 자료형(type)   변수명 ; )
                          // 여러개 변수 선언시          struct student   st, st2, st3, *st; )      

_구조체 정의와 변수선언을 동시에_
struct student                        // 구조체 원형정의    
{
char name[20]                  
int english ;
int math ;
}st1                                    //  여러개 변수 선언시          } st1,st2,st3 ;  )
                                   
//  struct student로 변수선언  ( 자료형 변수명 ; )
(*) tag 는 type와 다르게 단독으로 변수선언에 쓰일 수 없다.

     위의 구조체에서 (태그) tag   =>  student
                            (자료형) type =>  struct student

     이를 typedef 를 이용해 새로운 자료형을 정의할 수 있다.


② typedef 사용
     typedef      : 새로운 자료형을 정의, C 언어,  
                        (cf. #define - 전처리 언어 )
     typedef    Old_type   New_type  ;

구조체 선언 ->  struct student
                      {
                              char name[20]                   
                              int english ;
                              int math ;
                      };

자료형 정의 -> typedef   struct student    STUDENT;  

변수 선언    -> student struct st1;
                      STUDENT st1;   

③ 구조체 선언과 자료형 정의(typedef) 동시에
typedef  struct student   
                             //  student (구조체의 태그)는  생략가능    


char name[20] ;
int english ;
int math ;
} STUDENT;

변수 선언    -> student struct   st1;
                      STUDENT st1;   


- 구조체 멤버 
  : 도트연산자(.) 사용해 접근
   ( 구조체변수. 멤버명 
   
- 구조체의 초기화
  : 배열과 달리, 하나의 구조체 변수가   다른 구조체 변수의 값을 한번에 받을 수 있다.
     ex)
     typedef struct 
     {
           int x;
           int y;
     }ST;

     ST st1={0,0} ;
     ST st2;={1,1} ;
     st1=st2 ; // OK !

- 구조체의 배열
 typdef struct
{
     char name[20];
     char country[20];
     int age;
} STUDENT;

int main()
{
   STUDENT st[4];
  
   st[1].name[0]=' j ' ;
   st[1].name[1]=' o ';
   st[1].name[2]=' e ';
   
   return 0;
}
  

 

-> 구조체의 배열에서 각 원소의 멤버 접근시, 배열 색인뒤 도트(.) 붙임

- 구조체 가리키는 포인터 변수
   : 화살표 사용해 접근
   ( 구조체변수 -> 멤버명  )      //  =  (*구조체변수).멤버명


- 구조체의 함수인수로 전달 방법
 구조체의 멤버로 전달
 구조체를 전달 
-> 전달 인수의 개수를 줄일 수 있음
 구조체 주소를 전달
-> 전달 인수의 용량을 줄일 수 있음
 
ex.

typedef struct
{
    int a;
    int b;
}ST;
void pass(int, int, int, int);
int main()
{
    ST st1;
    ST st2;
   
    pass( st1.a , st1.b, st2.a, st2.b);
    return 0;
}
void pass(int a1, int b1, int a2, int b2)
{
    return;
}
 
typedef struct
{
    int a;
    int b;
}ST;

void pass(ST, ST);
int main()
{
    ST st1;
    ST st2;
   
    pass( st1, st2 );
    return 0;
}
void pass(ST st1, ST st2)
{
    return;
}

 typedef struct
{
    int a;
    int b;
}ST;

void pass(ST *, ST *);
int main()
{
    ST st1;
    ST st2;
   
    pass( &st1, &st2);
    return 0;
}
void pass(ST *st1, ST *st2 )
{
    return;
}
(*)  함수의 인수전달 기법   
┌ 값 전달 호출(call by value)
│  : main함수내 변수 값 불변
│    호출된 함수에서 메인 함수로 인수전달은 return 문 이용해 1개만 가능

└ 주소 전달 호출(call by address)  
    : 포인터 이용해 main의 변수 수정 가능.
      호출된 함수의 변수를 포인터로 수정하므로, 여러개의 변수 수정 가능
    
->  일반적인 자료형을 함수의 인수로 전달할 때, 원본 변수의 수정유무에 따라  값 전달, 주소 전달 방법을 선택
     구조체 자료형은 인수로 전달되는 자료형 크기가 클 경우 문제가 되므로, 포인터를 이용한 주소 전달 방법을 주로 사용.


_구조체의 메모리 할당_


---------------------------------------------------------------------------------------------------------------------
Network
---------------------------------------------------------------------------------------------------------------------
_Port_
TCP/IP 네트워크에서 포트 번호는 트래픽을 컴퓨터 내에서 실행되고 있는 적절한 프로그램에 분배시키기 위해 논리적으로 할당한 것. 

① Well-known port (잘 알려진 포트)  0~1023 번
   :특정 용도를 위해 IANA에서 할당한 TCP, UDP 포트번호
    일반적으로 용도별로 포트번호가 지정되어있지만 변경하여 사용하기도 함. 
② registered port   (등록된 포트) 1024~49151번
③ dynamic port     (동적 포트)   49152 ~ 65535 번

ex.well-known port 7 사용




_ [book p.24] TCP echo client _

/* ---Practical.h--- */

void DieWithUserMessage(const char *msg, const char *detail);
void DieWithSystemMessage(const char *msg);


/* ---DieWithMessage.c--- */


/* ---TCPEchoClient4.c--- */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include"Practical.h"    // messgae 함수 선언된 헤더파일 include

#define BUFSIZE 30       // 문자열 크기

int main(int argc, char *argv[])
{
          /* --- 변수 선언 --- */

/* --- 인자 개수 확인 ( 3 or 4 ) --- */
/* --- sock ( )  --- */
/* --- 주소 구조체 값 입력 --- */
/* --- connect --- */
/* --- 입력한 문자열(argv[2]) send( ) --- */
/* --- recv ( ) --- */
   return 0;
}  

-> 실행결과




...... end........
내용이 별로 없는 것 같네요;; 오타,비문 지적, 추가설명 환영합니다~

728x90