태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



'시스템 프로그래밍/Linux'에 해당되는 글 6건

  1. 2009/05/15 도서관리 연결리스트
  2. 2009/05/12 연결리스트
  3. 2009/05/08 유용한 vi 명령어
  4. 2009/05/08 Linux 압축명령 tar 및 ftp 명령어
  5. 2009/04/29 VMware 브릿지모드 네트웍 설정
  6. 2009/04/27 Vmware Workstation v5.5.1
2009/05/15 20:18

도서관리 연결리스트


<eha.h>
#ifndef
 _EHA_H_
#define _EHA_H_

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>


#define
 M_Number 0x77ff2288

#pragma pack(1)

typedef int CSize_t;
typedef int MNum_t;
typedef struct _Node
{
  int iNum; 
  char cName[10];
  char cPhone[14];
  struct _Node *next;  //4byte
} Node; //32byte

typedef struct _EHAH
{
  CSize_t iCnt;
  MNum_t iMagic;
} EHAH;

#pragma pack()

#endif

<book_link.c>
#include
 "eha.h"

void link_free(Node *Head);
void link_print(Node *Head);

Node* LinkInsert(Node *Head, Node *NewNode);
Node* New_Create(Node *New);

void link_write(Node* Head);
void link_read(Node* Head, Node *New);

int main()
{
  int ip=0;
  int i=0;
  int iFd;
  int iRet;
  
  Node *Head = 0;  //struct _EHA *Head = 0
  Node *New = 0;   
  Node temp;
  
  while(1){
    printf("1.Sort_Insert 2.write 3.read 4.print 0.exit: ");
    scanf("%d"&ip);
    fflush(stdin);
    switch(ip){
      case 1:
        New = New_Create(New);
        Head = LinkInsert(Head, New);
        break;
      case 2:
        link_write(Head);
        break;
      case 3:
        link_read(Head,New);
        break;
      case 4:
        link_print(Head);
        break;        
      case 0:
        link_free(Head);
        printf("종료합니다");
        printf("-----------------------\n");
        return 0;
      default :
        printf("error\n");
    }
  }
  return 0;
}
void link_write(Node* Head)
{
  int iFd;
  int iRet;
  
  iFd = open("Node.DBF", O_RDWR|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IXUSR|S_IROTH|S_IWOTH|S_IXOTH);
  
  while(NULL != Head)
  {
    iRet = write(iFd, Head, sizeof(Node));
    Head = Head->next;
  }
  printf("쓰기 실행\n");
  printf("-----------------------\n");
  close(iFd);
  return;
}
void link_read(Node *Head, Node *New)
{
  int iFd;
  int iRet;
  
  Node temp;
  
  iFd = open("Node.DBF", O_RDWR);
  Head = 0;  //struct _EHA *Head = 0

  while(1){
    //읽기
    iRet = read(iFd, &temp, sizeof(Node));  //읽어들인 데이터를 temp구조체에 저장
    if(iRet == 0)
    {
      break;
    }
    if(sizeof(Node) != iRet)  //read로 반환된 크기iRet와 Node의 크기와 일치하는지 검사
    {
      printf("read error!\n");
      link_free(Head); //혹시나하는 동적할당을 지움
      close(iFd);
      return;
    }
    temp.next=0;
    New = (Node*)malloc(sizeof(Node));  //동적할당
    *(New) = temp;  //read에서 읽어온 temp를 New의 주소에있는 값에 넣음
    Head = LinkInsert(Head, New);
  }
  close(iFd);
  printf("읽기 실행\n");
  printf("-----------------------\n");
  link_print(Head);
  return;
}

// 잘짜진 삽입정렬 
Node* LinkInsert(Node *Head, Node *NewNode)
{
  Node *Current;
  Node *Follow;

  Current = Follow = Head;
  
  while((NULL != Current) && (Current->iNum < NewNode->iNum))
  {
    Follow = Current;
    Current = Current->next;
  }
  NewNode->next = Current;

  if(Current == Head)
  {
    Head = NewNode;
  }
  else
  {
    Follow->next = NewNode;
  }
  return Head;
}

//새로운 동적할당
Node* New_Create(Node *New)
{
  New = (Node*)malloc(sizeof(Node));
  printf("번호를 입력하세요.\n");
  scanf("%d"&New->iNum);
  printf("이름을 입력하세요.\n");
  scanf("%s"&New->cName);
  printf("폰번호를 입력하세요.\n");
  scanf("%s"&New->cPhone);
  New->next = NULL;
  return New;
}

//연결해제
void link_free(Node *Head){
  Node *Temp;
  for(Temp = Head; NULL != Head; Temp = Head)
  {
    Head = Head->next; //이동
    free(Temp);    // 제거
  }
}

//출력
void link_print(Node *Head)
{    
  Node *Temp;
  for(Temp=Head; Temp != NULL; Temp = Temp->next){ 
    printf("번호:%d\n", Temp->iNum);
    printf("이름:%s\n", Temp->cName);
    printf("폰번호:%s\n", Temp->cPhone);
    printf("------------------------\n");
  }
}


 

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0
2009/05/12 16:35

연결리스트


<makefile>

CC=gcc

all:link_w2 struct_r
 @echo "컴파일 시작"
link_w2: link_w2.c eha.h
 $(CC) -o ex link_w2.c
struct_r: struct_r.c eha.h
 $(CC) -o struct struct_r.c
clean:
 @rm -rf link_w2 struct_r
hi:
 @echo "컴파일 종료"

<eha.h>

#ifndef _EHA_H_
#define _EHA_H_

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>


#define M_Number 0x77ff2288

#pragma pack(1)

typedef int CSize_t;
typedef int MNum_t;
typedef struct _EHA
{
 int iNum;
 char cName[10];
 char cPhone[14];
 struct _EHA *next;  //4byte
} EHA; //32byte

typedef struct _EHAH
{
 CSize_t iCnt;
 MNum_t iMagic;
} EHAH;

#pragma pack()

#endif

<link_w2.c>

#include "eha.h"

void link_create(EHA **Head);
void link_create2(EHA **Head, EHA **Top);
void link_create3(EHA **Head);
EHA* link_create4(EHA *Head);

void link_free(EHA *Head);
void link_printf(EHA *Head);

int main()
{
 EHA *Head;  //struct _EHA *Head
 //EHA *Top=NULL;  //link_create2
 Head = 0;
 
 Head = link_create4(Head);
 Head = link_create4(Head);
 Head = link_create4(Head);
 link_printf(Head);
 link_free(Head);
  
 return 0;
}
//1,2,3 -> 3,2,1
void link_create(EHA **Head)
{
 EHA *Temp;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 Temp->next = *Head;
 *Head = Temp;
}
//1,2,3 -> 1,2,3
void link_create2(EHA **Head, EHA **Top)
{
 EHA *Temp;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;
 
 if(*Head == NULL){
  *Head = Temp;
 }
 else{
  (*Top)->next = Temp;
 }
 *Top = Temp;
}
//1,2,3 -> 1,2,3 함수내에서 구현
void link_create3(EHA **Head)
{
 EHA *Temp;
 EHA *Top;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;
 if(*Head == NULL)
   *Head = Temp;
 else{
  for(Top = *Head; Top->next != NULL; Top=Top->next);
  Top->next = Temp;
 }
}

EHA* link_create4(EHA *Head)
{
 EHA *Temp;
 EHA *Top;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;  
 if(Head == NULL){
  Head = Temp;
  return Head;
 }
 Top=Head;
 while(Top->next != 0)
  Top = Top->next;
 Top->next = Temp;
 
 return Head;
}

void link_free(EHA *Head){
 EHA *Temp;
 for(Temp = Head; NULL != Head; Temp = Head)
 {
  Head = Head->next; //이동
  free(Temp);  // 제거
 }
}

void link_printf(EHA *Head)
{  
 EHA *Temp;
 for(Temp=Head; Temp != NULL; Temp = Temp->next){
  printf("번호:%d\n", Temp->iNum);
  printf("이름:%s\n", Temp->cName);
  printf("폰번호:%s\n", Temp->cPhone);
 }
}

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0
2009/05/08 11:59

유용한 vi 명령어

삽입
I: 줄의 제일 앞에서 입력
A: 줄의 제일 끝에서 입력

콤보command
4w: 4단어 skip후 이동
4b: 4단어 skip후 이동
4j,h,k,l: 커서이동시 지정한 수만큼 건너뛰므로 이동을 좀 더 빨리 할 수 있다.

줄의 결합(J)
2줄이 있고, 2째줄을 1째줄 끝에 붙이고 싶다면, 1째줄에서 J를 입력하면 된다.

커서이동
0: 줄의 처음
^: 줄의 처음(글자가 시작되는 처음)
$: 줄의 끝
w: 단어단위 이동
e: w와 같으나 단어의 끝으로 이동
b: w의 반대방향으로 이동
H, M, L: 커서를 화면 상,중,하로 이동

검색(/후 검색할 단어입력)
n: 뒤로 검색
N: 앞으로 검색

매크로
ab aa aaaa: aa를 입력하면 aaaa로 자동변환

치환
s/pattern/replace:   현재줄의 첫번째 matching pattern치환
s/pattern/replace/g: 현재줄의 모든 matching pattern치환
%s/pattern/replace/g:  모든 줄의 치환
line,lines/pattern/replace: 해당 범위의 치환

저장
w>> file: 지정한 파일에 추가

윈도 split
vi내에서 위아래로 윈도가 분활되면서 2개의 파일을 동시에 open/편집할 수 있다.
ex-mode(:프롬프트상태)에서 'sp 파일이름'
윈도우가 전환은 Ctrl+ww

기타
1. d의 경우 command모드로 계속 남아 있으나 c는 삭제후 insert모드로 변환한다.
   cc, c$, cw등은 유용하게 사용될 수 있다.
2. .은 마지막 명령을 되풀이한다.

visual모드
윈도의 텍스트 에디터와 같이 선택부분이 반전되면서 복사,삭제등을 할 수 있다.
v로 visual모드로 집입하여 커서키를 사용해 원하는 부분을 선택한다.
복사는 y, 삭제/잘라내기는 d로 할 수 있다.

vi설정(vim설정)
자신의 홈디렉토리에 .vimrc를 생성하고 다음과 같이 할 수 있다.

set ai
set ts=4
set nu

각각 auto-indent, tab stop, numbering

윈도에서 작업중 vi에 붙여넣기시 계단현상발생 방지
:set paste

위치기억(UltraEdit의 ALT-F2, F2와 동일한 기능)
m{a-z}: 현재위치를 {a-z}로 북마크함
`{a-z}: 기억해둔 {a-z}로 이동. 보통 한개만 등록했다면 그냥 ``를 사용하면 된다.

레코딩
설정파일의 주석추가/삭제시 유용하게 사용할 수 있다.(이미 vi에 매크로기능이 있지만, 레코딩이 UltraEdit의 매크로기능과 유사하다.)
q{a-z}: {a-z}로 레코딩 시작. {a-z}만 가능한게 아니고 실제 {0-9a-zA-Z"}를 적기 번거로워 이렇게 표시만 한 것이다.
q:      레코딩 종료
@{a-z}: 레코딩 내용 적용(@@를 하면 바로 이전의 레코딩내용을 적용, N@@은 N으로 지정한 숫자만큼 적용)

ctags사용
쉘에서 ctags -R하여 모든 소스에 대해 인덱스 생성
vi를 실행하고 검색할 단어를 :ta tag로 지정하든지, 단어가 있는 곳에 커서를 둔다.
해당함수(오브젝트)가 정의된 곳으로 가기: Ctrl + ]
되돌아가기: Ctrl + t

여러 파일 편집
vi a.c b.c c.c와 같이 여러 파일을 지정한다.
args: 파일목록 표시
n: 다음파일 편집(vi시작지 지정하지 않는 파일은 'n 파일이름'이로 지정하면 된다.)
rew: 이전 파일 편집(vim에선 prev를 사용해도 된다)
*현재 편집중인 파일을 저장해야 다음 파일을 수정할 수 있음에 주의
(불편한 편집이 아닐 수 없다.)

여러줄을 주석으로 처리할때
10줄을 주석기호 #을 사용하여 주석처리하려면 다음과 같이 하면 된다.
우선, 첫째줄에 #를 붙이고, 두째줄로 넘어와 9.를 입력하면 된다.
.(period)는 마지막에 수행한 명령어를 반복하는 명령이다.
This article comes from dbakorea.pe.kr (Leave this line as is)

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0
2009/05/08 10:34

Linux 압축명령 tar 및 ftp 명령어

tar -cf 파일명.tar *.*     ->압출
gzip 파일명.tar      ->파일명.tar.gz 압축파일 생성
tar -xzvf 파일명.tar.gz    ->압축파일 풀기

<Dos창에서 ftp접속 및 명령어>
c:\>ftp
ftp>open 123.123.123.123         ->123.123.123.123으로 접속됨
get 파일가져오기
mget 여러파일 가져오기
put 파일전송
bin 파일을 이진모드로 받음
ftp>mget *exe   ->exe파일 모두 받음

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0
2009/04/29 09:06

VMware 브릿지모드 네트웍 설정


그냥 게스트OS의 setting(ctrl+d)에 들어가서 NAT로 돼 있는 걸 bridged로 바꾸기만 하면 될 줄 알았고, 인터넷 검색해봐도 대부분 그렇게만 설명이 나와 있다.

한참동안의 삽질 끝에, 결국 새로 추가한 가상 네트웍카드로 비로소 성공했다.

정확한 원인은 모르겠으나, VMware 초기 설치시 디폴트로 생성되었던 2개의 가상 네트웍카드, VMnet1과 VMnet8은 bridged 모드가 지원되지 않았다. 아니, 정확히 말하면 bridged 모드를 선택해도 전혀 적용되지 않는 듯 보인다.
(VMware의 버전에 따라 디폴트로 생성되는 가상 네트웍카드의 개수와 번호는 다를수도 있다. 내가 설치한 버전은 5.0.0 build-13124이다.)

결국, 다음과 같이 해서 성공했다.

먼저, 가상 네트웍카드 추가하고 실 네트웍카드에 브릿징.

1) Edit > Virtual Network Settings
2) Host Virtual Network Mapping 탭 선택
3) 아래에 나오는 0~9번 가상 네트웍카드 중, 특수기능(?)을 하는 0번과 디폴트 생성된 2개를 제외한 나머지 7개 중 1개 선택
4) 선택한 가상 네트웍카드를 Not bridged 상태에서 실 네트웍카드에 bridging
5) OK 클릭하고 끝.

다음, 네트웍 연결방법을 bridged mode로 변경.

1) VM > Setting
2) Hardware 탭 선택
3) Ethernet을 Custom에 놓고 방금 새로 추가한 가상 네트웍카드를 선택
4) OK 클릭하고 끝.

여기까지 하면 게스트OS 네트웍카드에 대한 하드웨어 차원의 처리가 끝난다.
마지막으로 게스트OS 들어가서 기본적인 네트웍 설정을 해주면 된다.

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0
2009/04/27 19:32

Vmware Workstation v5.5.1

Asianux 설치 방법


'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0