달력

5

« 2024/5 »

  • 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

http://suite.tistory.com/  fs

하나 포스 

http://pds.hanafos.com/NPViewPds.asp?fileSeq=70389&rUrl=/NPListAll.asp


있는 프로그램 소스. 대학교 3학년때 학교 소프트 공모전 대비하여 만든 프로그램  -


ATL , MFC , 인스톨 쉴드 ,사용 소스가 있다. 학생때라 참 코딩 지저분함 ~.~



자료설명
 


쉽고 간편한 메일첨부/FTP전송 - Quick Append v0.9

[특징]

- 쉽고 간편하게 첨부파일을 메일로 전송

- 전송과정 모니터링 기능

- FTP서버로 파일을 빠르게 전송


[사용법]

1. 전송할 파일을 오른쪽 클릭 후 메일로 보내기를 선택

2. 창이 뜨면 E-Mail로 보내기 클릭~! 완료! (자체SMTP이기 때문에 메일서버 필요없음)

3. 탭에서 FTP파일을 클릭하시면 FTP도 빠르게 전송할 수 있습니다.


본 자료는 프리웨어입니다.

사용자 삽입 이미지

 



 
 
 


:
Posted by mastar

http://suite.tistory.com/2008 04 fs

printf 에서 ASCILL chr 값인 [ESC]을 이용해서  콘솔창에서 글자 색을 변경


printf("%s","ESC[변경할 색상값m"); ????


ex)  ESC 값은 10진수 27로 사용


"콘솔출력 화면에  빨간색 표시"


printf("%c[31m 콘솔출력 화면에  빨간색 표시",27);


다신원래 색으로 할려면


printf("%c[0m 콘솔출력 화면에  빨간색 표시",27);



색상값 RGB


31 ->  빨강  ,  33 -> 노랑 ,   34 -> 파랑

     





 

:
Posted by mastar

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

http://suite.tistory.com/ 2007 12.18


1. symbol                             in file
    mallinfo 메시지

   -> -lmalloc

2. symbol                             in file
   symbol belongs to implicit   dependency 메시지

    /usr/lib/libdl.so.1)

  -> -ldl


3. open

   accept 소켓 관련

  -> -lsocket


등등 추가


너무 기초인가 -.-^

 

:
Posted by mastar

http://suite.tistory.com/ fs 2007 04


주석을 달았는데도 뭔말인지 모르겠다 ㅎㅎ

원래는 BM(Boyer Moore)의 문자열 매칭 알고리즘을 할려고했는데~

불일치(bad character)방책은 되는데 일치 접미부(good suffix) 방책은 이해는가지만 구현이 안된다 ~.~

먼저 KMP의 구현을 봐야 일치 접미부도 구현할수있을것 같다~

BM는 나중에 시간나면 공부를 다시 ~.~


KMP

- 중복 패턴에 대한 사전정보를 미리 만든다 ( kmp 테이블생성 | 실패함수)

  ex)   index : 0 1  2  3  4  5   6
       pattern : A B C  D A  B  D 
         prefix : 0  0 0  0  1   2  0
   찾을 문자열 앞 AB와 뒤부분 AB가 일치함으로 뒤의 AB index 4,5부분의 kmp 테이블(사전중복테이블)에 각 1,2값을

  얻어 추후 중복 으로 검색 할 필요없게? 한다  


- 중복 패넡 사전정보를 가지고  불일치가 일어나지 않는 앞부분은  다시 비교하지 않는다(kmp 테이블이용 failure function )

- kmp 아무래도 중복이 자주 일어나는 패턴에는 좋을 효과를 얻을수 있는 알고리즘 같지만 일반 텍스트 에서는 BM 이 좀더

   효율적인 알고리즘이 될 것 같다. 왜냐하면 찾을 문자(패턴)를 뒷글자부터 매칭을 시도하기 때문이다~

  즉 한국말이나 영어들이 철자 앞부분보단 단어 마지막 철자들 변화가 많이 생길 가능성이  많으므로~


fs_grep.c


/* http://ppcast.cs.vt.edu/prod/ppCast/files/html/334/img12.html */


#include <stdio.h>
#define PSIZE   256

/* strlen(pattern) + 1 */
#define XSIZE   1024

int preKmp(char *pattern_str,int pattern_len, int kmpNext[])
{

 if(pattern_str==NULL) return -1;
 
 int i=1;
 int matches=0;

 while (i < pattern_len){

  // 같은 글자인지 확인후 매칭 카운트를 올린다.
  if(pattern_str[i] == pattern_str[matches]){
   matches++;
   kmpNext[i]=matches;
   i++;
   //다음 글자 확인해본다
   continue;
  }

  // 이전 글자(matches-1)와는 매칭 했지만 현재 글자(i)와 매칭 하지않을 경우
  if( matches > 0 ){
   matches=kmpNext[matches -1];
   // 이전글자와 확인해본다
   continue;
  }
  //매칭 하는 글자가 없거나 이전 글자와도 매칭 하지않을 경우
  i++;

 }
 return 0;
 
}

int main(int argc , char* argv[])
{

 FILE *fp;
 char pattern_str[PSIZE];
 char file_path[PSIZE];
 char line_buf[XSIZE];
 int i, matches, kmpNext[XSIZE];
 int line_cnt=0;
 int line_len=0;
 int pattern_len=0;

 if(argc != 3) {

  printf("\n[Usage] %s <pattern_str> <file_path>\n",argv[0]);
  return ;
 }
 strcpy(pattern_str,argv[1]);
 strcpy(file_path,argv[2]);

 for(i=0;i<XSIZE;i++){
  kmpNext[i]=0;
 }

  pattern_len=strlen(pattern_str);

 if( ! (fp=fopen(file_path,"r"))){
                printf("File Not Found (%s)\n",file_path);
                return -1;
        }
 
 // 일치하지 않을경우 위치를 옮길수? 있도록 kmp 테이블을 생성한다.
 preKmp(pattern_str,pattern_len, kmpNext);

 while(1)
 {

  if(fgets(line_buf,sizeof(line_buf),fp)==NULL) break;
  line_cnt++;
  line_len=strlen(line_buf);

  // 한줄에 해당하는 라인을 탐색한다.
  i = 0;
  matches = 0;
  while ( i < line_len ) {

   if ( line_buf[i] == pattern_str[matches] ) {
    matches++;
    // matches 값과 찾는 패턴의 길이가  같으면 찾은것으로 판단.
    if ( matches == pattern_len){
     printf("[LINE:%d] %s",line_cnt,line_buf);
    }else i++;

    //다음 문자 검색
    continue;
   }

   // 이전문자와 매칭 한적이 있을경우
   if ( matches > 0 ){
    matches = kmpNext[matches - 1];
    continue;
   }

   // 매칭이 이전과 현재 전혀 없는 경우
   i++;
  }

 }//end of while(1)

 return 0;


}

사용자 삽입 이미지




 



 

:
Posted by mastar
2008. 5. 15. 19:37

[gcc] 문자열 추출 파싱 용-ILE/LNAG-C/C++2008. 5. 15. 19:37

http://suite.tistory.com/ fs 2007 3

 

파싱할때 쫌 많이쓰는 함수~



char *getstr(char *src, char *dst, char delim)
{
        while(*src)
        {
                if(*src == delim)
                {
                        src++;
                        break;
                }

                *dst++ = *src++;
        }

        *dst = '\0';

        return src;
}

그냥 사용?


 while(pivot_ptr && *pivot_ptr){

                strcpy(get_buf_str,"");

                pivot_ptr=getstr(pivot_ptr,get_buf_str,'|');

                //구분자 | 이걸로 파싱되어 get_buf_str에 담아온다.

               

 }

 

:
Posted by mastar

http://suite.tistory.com/

fs 2007 03



그냥 200개~~


 binary search 시간복잡도 O (logn)  ~ 최악 n 근데 별로 쓴일이없다!


그냥~  몇개 안되면 linear search 쓰두뭐~



#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define MAX_NUM 200

int SELECTION_SORT(int p_ARR_NUM[]){

        int rand_i,loop_i,loop_j;
        int tmp_swap_num=0;
        srand((unsigned int)time(NULL));
        for(rand_i=0;rand_i<MAX_NUM;rand_i++){
                p_ARR_NUM[rand_i]=rand()%1000;
        }
        for(loop_i=0;loop_i<MAX_NUM;loop_i++){
                for(loop_j=loop_i+1;loop_j<=MAX_NUM;loop_j++){

                        // 올림 차순
                        if(p_ARR_NUM[loop_i] > p_ARR_NUM[loop_j]){
                                tmp_swap_num=p_ARR_NUM[loop_i];
                                p_ARR_NUM[loop_i]=p_ARR_NUM[loop_j];
                                p_ARR_NUM[loop_j]=tmp_swap_num;
                        }
                }
//              printf("loop:[%d] = %d\n",loop_i,p_ARR_NUM[loop_i]);
        }

        return 0;
}
int BINARY_SEARCH(int key, int p_ARR_NUM[])
{
        int left=0,mid=0,right=MAX_NUM-1;

        int idx_find=-1;
        int min_idx=0,max_idx=MAX_NUM-1;

        while (right >= left)
        {
                mid = (right + left) / 2;

                printf("middle value:[%d] \n",p_ARR_NUM[mid]);

                if (key == p_ARR_NUM[mid]){
                        //값을 찾음
                        idx_find=mid;
                        break;
                }

                // 키값이 가운데 값보다 클경우 왼쪽값을 올려준다
                if(key >  p_ARR_NUM[mid]){

                        min_idx=mid;
                        max_idx=mid+1;

                        left = mid + 1;
                }
                // 키값이 가운데 값보다 작을 경우 오른쪽값을 내려준다
                if(key <  p_ARR_NUM[mid]){

                        min_idx=mid-1;
                        max_idx=mid;

                        right = mid - 1;
                }

        }
        if(idx_find==-1){

                if(min_idx<0) min_idx=0;
                if(max_idx>MAX_NUM-1) max_idx=MAX_NUM-1;

                printf("입력한 키값 '%d' 에대한 일치 결과를 찾지 못함 ...\n",key);
                printf("인접한 최소값:'%d' , 최대값:'%d'\n\n",p_ARR_NUM[min_idx],p_ARR_NUM[max_idx]);

        }
        return idx_find;
}
int main()
{
        int ARR_NUM[MAX_NUM];
        int print_i,input_num;

        printf("0~999 사이의 검색 할 숫자입력:");
        scanf("%d",&input_num);

        if( input_num < 0 || input_num > 1000 ){
                printf("Check number['%d']:( 0 ~ 999 )\n\n",input_num);
                return -1;
        }

        SELECTION_SORT(ARR_NUM);

        print_i=BINARY_SEARCH(input_num,ARR_NUM);

        if(print_i>=0) printf(" 일치 결과 찾음 ARR_NUM[%d]: %d \n\n",print_i,ARR_NUM[print_i]);

        return 0;

}


 

 

:
Posted by mastar
2008. 5. 15. 19:36

[gcc] 선택 정렬 용-ILE/LNAG-C/C++2008. 5. 15. 19:36

http://suite.tistory.com/ fs 2007 03 02

 


그냥~ 200개


#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define MAX_NUM 200

int main(int argc ,char *argv[])
{
        if(argc < 2 ){
                printf("<usage> %s [ asc | desc]\n",argv[0]);
                return -1;
        }

        int ARR_NUM[MAX_NUM];
        int rand_i,loop_i,loop_j,print_i;
        int tmp_swap_num=0;

        int is_type_asc=0;
        if(strcasecmp(argv[1],"asc")==0) is_type_asc=1;


        srand((unsigned int)time(NULL));

        printf("------------ 랜덤 출력 [%s] ----------------\n",argv[1]);
        for(rand_i=0;rand_i<MAX_NUM;rand_i++){
                ARR_NUM[rand_i]=rand()%1000;
                printf("RANDOM[%d]:%d\n",rand_i+1,ARR_NUM[rand_i]);
        }

        for(loop_i=0;loop_i<MAX_NUM;loop_i++){
                for(loop_j=loop_i+1;loop_j<=MAX_NUM;loop_j++){

                        // 올림 차순
                        if(is_type_asc && ARR_NUM[loop_i] > ARR_NUM[loop_j]){
                                tmp_swap_num=ARR_NUM[loop_i];
                                ARR_NUM[loop_i]=ARR_NUM[loop_j];
                                ARR_NUM[loop_j]=tmp_swap_num;
                        }
                        // 내림 차순
                        if( ! is_type_asc && ARR_NUM[loop_i] < ARR_NUM[loop_j]){
                                 tmp_swap_num=ARR_NUM[loop_i];
                                 ARR_NUM[loop_i]=ARR_NUM[loop_j];
                                 ARR_NUM[loop_j]=tmp_swap_num;
                        }
                }

        }
        printf("------------ 결과 출력 [%s] ----------------\n",argv[1]);
        for(print_i=0;print_i<MAX_NUM;print_i++){
                printf("Sort[%d]:%d\n",print_i+1,ARR_NUM[print_i]);
        }

        return 0;

}

 

:
Posted by mastar

http://suite.tistory.com/ fs


OS : HP-UX kdrm01 B.11.11 U 9000/800 

gcc :  4.1.1

에러 메시지


xmlconfig.c: In function 'process_addr':
xmlconfig.c:647: error: invalid storage class for function 'parse_addr'


조치 사항 :

 xmlconfig.c 647 라인에 있는 static 선언을 제거 해줌



참고 사이트 : http://www.cinsk.org/cfaqs/html/node3.html#SECTION00340000000000000000


======================================================================================================

1.4 Storage Class 우리는 선언의 두 가지 부분, base type과 declarator를 이미 다루었습니다. 다음 몇 질문에서는 storage class에 대한 것을 다룹니다. Storage class는 선언된 object나 함수의 visibility와 lifetime을 (각각 ``scope''와 ``duration''이라고 부르기도 합니다.) 다룹니다.



Q 1.10
static 함수나 변수를 선언할 때, 항상 static이라고 써 주어야 하나요?
Answer
언어 표준에서는 항상 써 줄 것을 요구하지는 않습니다. (가장 중요한 것은 첫 선언에 static을 써 주는 것입니다.) 하지만 규칙이 조금 복잡하게 얽혀있고, 함수냐 변수냐에 따라 조금씩 다릅니다. (게다가 이 문제에 있어서 현존하는 코드도 너무나도 다양합니다.) 따라서 가장 안전한 방법은, 모든 정의와 선언에서 항상 static을 써 주는 것입니다.
References
[ANSI] § 3.1.2.2
[C89] § 6.1.2.2
[ANSI Rationale] § 3.1.2.2
[H&S] § 4.3 p. 75

======================================================================================================




 

:
Posted by mastar

http://suite.tistory.com/ fs

1. 아파치 쿼리 로그  랭킹  보는 GlanceQry v 0.4  
     
 아파치 로그를 시스템 명령(uniq,sort,cat)를 이용하여 시간별(초단위가능),쿼리등수,전체 쿼리를 분석해내는 프로그램


2. 환경


 - 아파치 로그 시간 포멧이  CLF(common log format) 타입 이어야 한다.
 - 로그 파일에 쿼리 스트링을 URL 인코딩 할것
 - 로그가 \xb5\xf0\xc0\xda\xc0\xce 방식 경우 \x => %로변경 할것

 - 시스템 명령어를 사용하기 때문에 uniq,sort,cat 명령어들이 되는지 본다.
 - 리눅스에서 테스트한 프로그램


3.  설치 방법


 - GlanceQry.tar를 푼다


 가. 디렉토리 구성
   
  * src 소스 디렉토리

   - GlanceQry.h   // 헤더 파일
   - GlanceQry.c   // 메인 소스
   - Makefile   // make 파일
  
  * GlanceQry     // 바이너리
  * config.GlanceQry   // 환경 파일(설정방법은 파일안에 설명해 두었음)
  * README    // 본 문서
     
 나. 참고 사항

  * access_glance.log   //테스트용 아파치 로그
  * GetQryStat.sh    //테스트용

     
4. 구동 방법  
  
 그냥 ./GlanceQry Usage: ./GlanceQry <config_file>     <apache_log_file>     <begin_date_time>  <end_date_time> <result_file>
 인자 설명

 * <config_file>  // 설정파일
 * <apache_log_file> // 아파치 로그 파일
 * <begin_date_time>  // 아파치 로그에서 시작 시간 범위를 찾을 날짜와 시간 (초까지) ex) 20060625000000
 * <end_date_time>  // 아파치 로그에서 끝 시간 범위를 찾을 날짜와 시간 (초까지) ex) 20060625235959
 * <result_file>  // 결과 파일 


 실행 중 에러 발생 경우는 대부분이 아파치 로그위치와 결과 파일위치등 경로 문제 경우가 많다.


5. 샘플 데이터


 - GetQryStat.sh

 access_glance.log 샘플 데이터를 분석하여 result_glance.kwd 파일을 만든다.

 result_glance.kwd 포멧은
  등수 쿼리수 쿼리 

GlanceQry.tar


 ==============================================================
  1       66 개롱역에서 잠실역까지 중국집
  2       11 스카이라이프
  3       11 감사원
  4       10 이대 미용실
   ~~~~
   ~~~
   ~~~~~
  1244    1 가곡 꽃
  1245    1 ㄹㅇㄴㄹㅇㄴ
  TotCnt: 1452
 ===============================================================
  마지막 줄 전체 쿼리수

 참고) 아직 큰데이터를 테스트 해보지 못해서 -.-;; 메모리 부족 현상이 발생 할 수 있을것 같음


 

:
Posted by mastar