달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

single linked list

develop life/c 2009. 8. 17. 10:41

작성자 : 김정덕


#include <stdio.h>
#include <malloc.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
#include <errno.h>
#include <stdlib.h>

#define DUP_METER   1000000

typedef int             INT;
typedef unsigned int    UINT;
typedef long long       INT64;
typedef time_t          TIME_T;

typedef unsigned long long TIME_64;
typedef unsigned long long UINT64;


unsigned long long timestamp( void )
{
    struct timeval  tv;
    unsigned long long ullRetval;

    memset( &tv, 0, sizeof( struct timeval ) );
    gettimeofday( &tv, NULL );
    ullRetval = ( tv.tv_sec * DUP_METER ) + tv.tv_usec;

    return ullRetval;
}

typedef struct _st_linkdata
{
    INT64   llkey;
    char    body[1024];
//  int     d_num;
    struct _st_linkdata *next;

}st_linkdata, *pst_linkdata;

pst_linkdata pnode; //  전역 구조체로 선언
pst_linkdata ptmp;

int main (int argc, char *argv[])
{
    int ch1; //첫케이스문 사용 변수

    while (1)
    {
        fflush(stdin);//  입출력 버퍼 초기화

        print_Menu(); // 메뉴 함수  호출
        scanf("%d", &ch1);

       if (ch1 < 0 || ch1 > 5) 지정 값 이외의 수가 입력 되었을때 에러
       {
            fprintf(stderr, "SCANF ERROR : %d\n", ch1);
            continue;
       }
      switch(ch1){ // 스위치 문 실행

            case 1:
                makeNew_link();//데이터 생성 함수
                print_list();// 화면 결과 출력 함수
            break;

            case 2:
                search_link();// 서치
            break;

            case 3:
                free_link();// 데이터 삭제 함수
                print_list();// 화면 결과 출력 함수
            break;

            case 4:
                print_list(); // 화면 결과 출력 함수
            break;

            case 5:
                return 0;
            break;
        }
    }
    return 0;
}

 

int makeNew_link()
{
    int dt;// 실행문에서 데이터 값을 직접 입력 받기 위해 사용 하였으나 삭제 비실행 변수
    fprintf(stdout,  "###CREATE NEW DATA### \n" , NULL);
    pst_linkdata pdata;

    pdata = (pst_linkdata)malloc(sizeof(st_linkdata));// 메모리 할당 부분
    pdata->next  = NULL;// 할당된 pdata의 다음 가르켜야 할 구조체를 를 NULL표시
    pdata->llkey = timestamp();// 키값을 타임 스탬프로 고유 값 입력

 

    if (pdata == NULL) // 메모리 할당 실패시 에러
    {
        fprintf(stdout, "MALLOC ERROR (%d:%s)\n", errno, strerror(errno));
        return -1;
    }
    ptmp = pnode;// 조작을 위해 pnode 첫번째를 임시에 저장
    sleep(1);// 그냥 그럴싸 하게 보일려고 슬립 삽입
    fprintf(stdout,  "###   COMPLETE   ### \n"  , NULL);
    sleep(1);
    while(1)// 무한루프를 위해 조건을 1 로 하고 시작
    {
        if(!ptmp)// ptmp가 처음 일 경우 pnode 에 생성된 pdata 저장
        {
            pnode = pdata;
        }
        else
        {
            for(; ptmp->next; ptmp = ptmp->next);// 임시에서 다음 까지 계속 돌며 확인
            {
                if(ptmp->llkey == pdata->llkey)// 키값이 같으면 에러
                {
                    fprintf(stdout, "SAME DATA ERROR!!!!! \n", NULL);
                    return 0;
                }

                ptmp->next = pdata;// 같은 것이 없다면 임시의 다음은 pdata로 지정
            }
        }
        return 0;
    }
    return 0;
}

 

 

int search_link()
{
    INT64 dt;// 키값이 되는 변수 입력 받기 위해 사용
    int j=0; // 에러 처리를 위해 삽입된 변수
    fprintf(stdout,  "###Insert Data For Search: \n"    , NULL);
    fflush(stdin);// insert buffer init// 입력 버퍼 초기화
    scanf("%llx", &dt);

    ptmp = pnode; // 조작을 위해 임시에 저장

    if(pnode == NULL)// 데이터가 없다면 에러
    {
        fprintf(stdout, "NON DATA \n", NULL);

        return 0;
    }

    for(; ptmp != NULL; ptmp = ptmp->next)// 임시에서 다음으로 계속 돈다
    {
        if(ptmp->llkey == dt)// 키값이 입력값과 같다면
        {   j=1; // 동일 키값이 있다면 j는 1로 바뀐다.
            fprintf(stdout, "FIND DATA llkey -> %llx\n",  ptmp->llkey);// 키를 찾았으므로 출력
        }
    }
    if(j == 0) // 아까 선언 했던 것이 키값이 없으면 그대로 0 이다. 에러 화면
    {
        fprintf(stdout, "HAVE NOT PLACE !!!!", NULL);
        return 0;
    }
        return 0;
}

 


int free_link()// 삭제 함수
{
    INT64 dt;// 입력 을 받기 위해 선언 된 변수
    fprintf(stdout,  "###Insert Data For Datafree: \n"  , NULL);
    fflush(stdin);// insert buffer init// 입력 버퍼 초기화
    scanf("%llx", &dt);

    pst_linkdata pdel;// 삭제시만 사용 되는 임시 구조체
    ptmp = pnode;// 조작을 위해 pnode 를 임시에 저장

    if(pnode == NULL)// pnode 가 없으면 당연히 에러
    {
        fprintf(stdout, "NULL DATA \n", NULL);
        return 0;
    }
    if(pnode->llkey == dt)// 처음 값인pnode 가 키값이 동일 하다면 삭제
    {
        fprintf(stdout, "llkey :  %llx\n", dt);
        fprintf(stdout, "llkey :  %llx\n", pnode->llkey);
        fprintf(stdout, "firt delete\n", NULL);
        pnode = ptmp->next;// pnode는 pnode의 다음 값이 된다.
        free(ptmp); // 그리고 임시에 저장된 pnode 를 삭제 한다.
        return 0;
    }

    pdel = ptmp;// 처음이 아닐경우 사용 되는 임시 구조체에 ptmp 를 저장

    for(; ptmp != NULL; pdel=ptmp, ptmp = ptmp->next)// ptmp 가 NULL아닌 곳에서 부터  next 로 증가 pdel에 ptmp를 계속 받으면서 이동이 중요.
    {
        if(ptmp->llkey == dt)// 동일값 찾은 상태
        {
            fprintf(stdout, "llkey :  %llx\n", dt);
            fprintf(stdout, "llkey :  %llx\n", pnode->llkey);
            fprintf(stdout, "delete complete\n", NULL);

            pdel->next = ptmp->next;// 서치된 임시구조체의 next를 pdel 에 연결하고 ptmp를 삭제 
            free(ptmp);//ptmp삭제
            return 0;
        }

    }
        return 0;
}

int print_list()
{
    int i=0;
    ptmp = pnode;

    printf("RESULT ----\n");
    for(; ptmp != NULL; ptmp = ptmp->next)
    {   i++;
        fprintf(stdout,"No.%d  llKey : %llx\n", i, ptmp->llkey);
        fprintf(stdout,"-----------------------------------\n", NULL);
    }
    fprintf(stdout, "TOTAL : %d DATA SEARCH\n", i);
    return 0;
}
int print_Menu()
{
    fprintf(stdout, "\n-----LINKED LIST TEST-----\n\n", NULL);
    fprintf(stdout, "1.MAKE NEW LINKED DATA\n", NULL);
    fprintf(stdout, "2.SEARCH DATA\n", NULL);
    fprintf(stdout, "3.FREE DATA(DELETE)\n", NULL);
    fprintf(stdout, "4.PRINT LIST\n", NULL);
    fprintf(stdout, "5.FINISH\n", NULL);
    fprintf(stdout, "WHAT DO U WANT?(1~4) : ", NULL);
    return 0;
}


 

Posted by 무심법
|
작성 : 090806

오류 확인

[jdkim@...]$ ulimit -c unlimited
일케 해제하고 컴파일 하면

세그멘테이션 등의 오류가 파일의 오류위치 정보등 상세하게 저장된다.

보는 방법은
gdb JDK(filename) core.26460(err no)

ex) [jdkim@...]$ file JDK(filename) core.801021(err no)
gdb 진입후
'where' 명령을 입력하면 에러줄 이동

끝낼때는 quit 입력




코어 파일 일곽 삭제
rm core.*
rm core.25612






//에러 위치 구문에 직접 라인이 어디 까지 출력되는지 확인
 fprintf(stdout, "TEST : %d\n", __LINE__);



Posted by 무심법
|
xcopy 네트워크드라이브 잡기 백업 등등등 [S] 백업



g***** 

내가 작성한 파일

@echo off
cls
color 0f
echo ------------------
echo BBQWORLD DB Backup
echo ------------------
xcopy D:\database_bak\BBQWORLD_DB_BAK\BBQWORLD_DB_BAK_REAL\*.* w:\backup\ /c /d /e /y
 

echo ------------------
 성공
echo ------------------  
Posted by 무심법
|