1. WindowsXP에서 VisualStudio2008 설치시 오류발생할 경우
  Visual C# 과 Visual Basic 하위의
  VisualStudioTools for Microsoft Office 선택 해제후 설치

 

2. VisualStudio2008 최신목록 파일/프로젝트폴더 제거
  regedit → HKEY_CURRENT_USER → Software → Microsoft → VisualStudio → 9.0 →
  FileMRUList: 최신목록 파일제거
  ProjectMRUList: 최신목록 프로젝트폴더 제거

 

3. VisualStudio2008 설치후 C#프로그래밍 후 게시 안되고
  "Signtool.exe를 찾을 수 없습니다" 나올때
  도구 → 옵션 → 프로젝트 및 솔루션 → VC++디렉토리 →
  다음파일의 디렉터리표시(S)항목에서 "라이브러리파일" 선택 후
  "C:\Program Files\Microsoft SDKs\Windows\V6.0A\Lib" 지정 후 확인

Posted by afewgood
,

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
HKEY_USERS\S-1-5-21-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxx\Software\SimonTatham\PuTTY\SshHostKeys

'etc' 카테고리의 다른 글

teraterm에서 sz/rz 사용법  (0) 2022.07.04
안드로이드스튜디오 맞춤법 검사 해제  (0) 2021.08.13
SK브로드밴드 H614G 모뎀 설정  (0) 2021.07.20
VirtualBox 관련  (0) 2021.07.19
libpng warning: 해결방법  (0) 2021.06.17
Posted by afewgood
,

fopen() open() Example

c 2023. 3. 7. 20:24

int fopen_exmaple(void)
{
    unsigned char data[40], buf[40];
    FILE *fRead, *fWrite;
    int readPOS=0, readLen, writePOS=0, writeLen;

    //Open input file
    fRead = fopen("afewgood.dat", "rb");
    if(fRead == NULL)    return -1;

    //Open output file
    fWrite = fopen("afewgoodR.dat", "wb");
    if(fWrite == NULL)
    {
        fclose(fRead);
        return -2;
    }

    while(!feof(fRead))
    {
        memset(data, 0x00, sizeof(data));
        readLen = fread(data, 1, 40, fRead);
        if(readLen == 0)    break;

        fseek(fRead, readPOS, SEEK_SET);
        readPOS += readLen;

        memset(buf, 0x00, sizeof(buf));
        memcpy(buf, data, 40);
        writeLen = 40;
        fwrite(buf, 1, writeLen, fWrite);

        fseek(fWrite, writePOS, SEEK_SET);
        writePOS += writeLen;
    }

    fclose(fRead);
    fclose(fWrite);

    sync();
    return 0;
}



#include <fcntl.h>
#include <unistd.h>

int open_example(void)
{
    unsigned char data[40], buf[40];
    int fRead, fWrite;
    int readPOS=0, readLen, writePOS=0, writeLen;

    //Open input file
    fRead = open("afewgood.dat", O_RDONLY);
    if(fRead == '\0')    return -1;

    //Open output file
    fWrite = open("afewgoodR.dat", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
    if(fWrite == '\0')
    {
        close(fRead);
        return -2;
    }

    while(1)
    {
        memset(data, 0x00, sizeof(data));
        readLen = read(fRead, data, 40);
        if(readLen == 0)    break;

        lseek(fRead, readPOS, SEEK_SET);
        readPOS += readLen;

        memset(buf, 0x00, sizeof(buf));
        memcpy(buf, data, 40);
        writeLen = 40;
        write(fWrite, buf, writeLen);

        lseek(fWrite, writePOS, SEEK_SET);
        writePOS += writeLen;
    }

    close(fRead);
    close(fWrite);

    sync();
    return 0;
}

'c' 카테고리의 다른 글

log파일 만들기 source  (0) 2023.02.07
리눅스 IP충돌 체크  (0) 2022.09.08
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
리눅스 usb mount 예제  (0) 2021.07.20
Posted by afewgood
,

log파일 만들기 source

c 2023. 2. 7. 21:47

#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>

void write_log(char *data, int len)
{
    int fd, i, pos, index;
    unsigned int bGetIndex=0;
    char current, flag=0;
    char buf[24], contents[440];    //로그 data 및 로그파일 사이즈 440=LOGData(X.22)*20

    fd = open("afewgood.log", O_RDWR);
    if(fd < 0)    return;

    memset(contents, 0x00, sizeof(contents));
    read(fd, contents, sizeof(contents));

    //Get Index & Flag ------------------------------------------------------------
    current = contents[0];
    if(current<'A' || current>'Z')
    {
        flag = 'A';
        index = 0;
        bGetIndex = 1;
    }
    else
    {
        pos = 0;
        for(i=0; i<20; i++) //20=data 갯수
        {
            memset(buf, 0x00, sizeof(buf));
            memcpy(buf, &contents[pos], len+1); //+1=flag(X.1)
            pos += len+1;

            if(buf[0] != current)
            {
                flag = contents[pos-((len+1)*2)]; //+1=flag(X.1)
                index = i;
                bGetIndex = 1;
                break;
            }
            current = buf[0];
        }

        if(bGetIndex == 0)
        {
            current++;
            if(current<'A' || current>'Z')    current = 'A';
            flag = current;
            index = 0;
        }
    }

    //write ---------------------------------------------------------------------
    pos = 0;
    memset(buf, 0x00, sizeof(buf));
    buf[pos++] = flag;
    memcpy(&buf[pos], data, len);
    pos += len;

    printf("LOG Index=[%c][%d]\n", flag, index+1);

    lseek(fd, index*(len+1), SEEK_SET); //+1=flag(X.1)
    write(fd, buf, pos);

    close(fd);
    sync();
}


int main(void)
{
    int select=0;
    struct timeval tv;
    time_t nowtime;
    struct tm *nowtm;
    char data[24];

    while(1)
    {
        printf("+++++ Write LOG Sample +++++\n");
        printf(" 1=write LOG\n");
        printf(" 5=Exit\n");
        printf("++++++++++++++++++++++++++++\n");

        printf("Menu Select>> :   ");
        scanf("%d", &select);

        switch(select)
        {
            case 1:
                gettimeofday(&tv, NULL);
                nowtime = tv.tv_sec;
                nowtm = localtime(&nowtime);

                memset(data, 0x00, sizeof(data));
                strftime(data, sizeof(data), "%Y-%m-%d %H:%M:%S", nowtm);    //(X.19)YYYY-MM-DD hh:mm:ss
                printf("%s\n", data);
                memcpy(&data[strlen(data)], "\x0d\x0a", 2);    //X.21

                write_log(data, 21);
                break;

            default:    break;
        }
    }
}

'c' 카테고리의 다른 글

fopen() open() Example  (0) 2023.03.07
리눅스 IP충돌 체크  (0) 2022.09.08
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
리눅스 usb mount 예제  (0) 2021.07.20
Posted by afewgood
,

#SETP_01. crontab에서 실행할 script파일 생성
#data_backup.sh ===========================================
#!/bin/sh

CURRENT_DATE=`date +%Y_%m%d`
tar zcf /home/afewgood/backup_${CURRENT_DATE}.tar.gz /home/afewgood/data

#find /home/afewgood/ -name "backup_*.tar.gz" -mtime +180    #생성된지 180일(6개월)이 지난 파일 찾기
find /home/afewgood/ -name "backup_*.tar.gz" -mtime +180 -exec rm -rf {} \;    #rm명령으로 파일 삭제
#end of file ==============================================

SETP_02 crontab 적용
#매달 말일 23:59에 스크립트 실행

#방법_01 /etc/crontab 파일을 직접 수정 (su권한)
[root@afewgood ~]$ vi /ect/crontab
59 23 * * * [ $(date +\%d -d tomorrow) = 01 ] && root /home/data_backup.sh

#방법_02 crontab -e 를 이용해서 crontab에 추가 (su권한 / 사용자 지정 없음)
[root@afewgood ~]$ crontab -e
59 23 * * * [ $(date +\%d -d tomorrow) = 01 ] && /home/data_backup.sh

※ crontab 작업목록확인
[root@afewgood~]$ crontab -l

※ arch linux crontab 설치 및 설정 순서
1. crontab 설치
[root@afewgood ~]$ sudo pacman -S cronie
2. 실행
[root@afewgood ~]$ sudo systemctl enable --now cronie.service
3. shell script 작성
4. crontab -e를 이용하여 crontab 명령 추가

√ 참고사이트 목록
https://velog.io/@khyup0629/shell-script-crontab-%EB%A7%A4%EB%8B%AC-%EB%A7%88%EC%A7%80%EB%A7%89-%EB%82%A0%EC%97%90-%EC%8B%A4%ED%96%89%EB%90%98%EB%8F%84%EB%A1%9D-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
https://blog.desdelinux.net/ko/usar-crontab-en-archlinux-con-cronie/
https://www.nemonein.xyz/2022/02/6424/
https://jdm.kr/blog/2

Posted by afewgood
,

리눅스 IP충돌 체크

c 2022. 9. 8. 09:21

int ip_conflict_check(char *device, char *ip)
{
    FILE *fp;
    char cmd[64], buf[128];

    memset(cmd, 0x00, sizeof(cmd));
    sprintf(cmd, "arping -q -D -I %s -c 1 %s; echo $?", device, ip);
    if((fp=popen(cmd, "r")) == NULL)
    {
        perror("popen() Fail");
        return -1;
    }

    memset(buf, 0x00, sizeof(buf));
    while(1)
    {
        if(fgets(buf, sizeof(buf), fp) == NULL) break;
    }
    pclose(fp);

    return buf[0]-0x30;
}

int main(void)
{
    char *device="eth0"; //"wlan0" //Network (Ethernet or WiFi) Interface Device
    char *ip="192.168.0.254"; //체크하고자 하는 IP

    ip_conflict_check(device, ip);
}

'c' 카테고리의 다른 글

fopen() open() Example  (0) 2023.03.07
log파일 만들기 source  (0) 2023.02.07
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
리눅스 usb mount 예제  (0) 2021.07.20
Posted by afewgood
,

//ip_conflict_check.sh
Start ========================================
#!/bin/sh
#arping -q -D -I DEVICE -c COUNT IP_ADDRESS; echo $?
#ex) arping -q -D -I eth0 -c 1 192.168.0.181; echo $?
#리턴값이 1 이면 이미 네트워크상에 IP가 존재 / 0 이면 중복 IP 없음

out="ip_check_ret.txt"
touch "$out"

arping -q -D -I eth0 -c 1 "$1"

ret=$?
echo "$ret" > "$out"
End ==========================================

실행방법
[root@afewgood /home ~]$ ./ip_conflict_check.sh 192.168.0.254
[root@afewgood /home ~]$  cat ip_check_ret.txt
1    //IP 존재함
[root@afewgood /home ~]$ 

Posted by afewgood
,

#include <regex.h>
int Check_IP_Addr(char *addr)
{
    regex_t state;
    const char *pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

    regcomp(&state, pattern, REG_EXTENDED);
    //0=success else=fail
    return regexec(&state, addr, 0, NULL, 0);
}

int Check_Email_Addr(char *addr)
{
    regex_t state;
    const char *pattern="^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$";

    regcomp(&state, pattern, REG_EXTENDED);
    //0=success else=fail
    return regexec(&state, addr, 0, NULL, 0);
}

int main(void)
{
    int i, ret;
    char *ip[]={"192.168.0.24", "192.168.0.753", "192.168.0.1"};
    char *email[]={"afewgood@afewgood.net", "example@test.com", "nonmail"};

    for(i=0; i<3; i++)
    {
        ret = Check_IP_Addr(ip[i]);
        if(ret != 0)    printf("[%d] Incorrect IP address\n", i);

        ret = Check_Email_Addr(email[i]);
        if(ret != 0)    printf("[%d] Incorrect Email Address\n", i);
    }
}

결과
[1] Incorrect IP address
[2] Incorrect Email Address

'c' 카테고리의 다른 글

log파일 만들기 source  (0) 2023.02.07
리눅스 IP충돌 체크  (0) 2022.09.08
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
리눅스 usb mount 예제  (0) 2021.07.20
ASCII & 한글 완성형(KSC5601) 출력 소스  (0) 2021.07.08
Posted by afewgood
,

typedef struct _tagTestStruct {
    int x;
    int y;
} testStruct;

void AddStructure(testStruct structArray[], int *count)
{
    testStruct sample;

    memset(&sample, 0x00, sizeof(testStruct));
    sample.x = 5;
    sample.y = 50;

    memcpy(&structArray[*count], &sample, sizeof(testStruct));
    (*count)++;
}

int main(void)
{
    int cnt=0, i;
    testStruct structArr[4];

    memset(&structArr, 0x00, sizeof(structArr));
    for(cnt=0; cnt<2; cnt++)
    {
        structArr[cnt].x = cnt+1;
        structArr[cnt].y = cnt+10;
    }

    AddStructure(structArr, &cnt);

    for(i=0; i<cnt; i++)
    {
        printf("structArr[%d] x=[%2d] y=[%2d]\n", i, structArr[i].x, structArr[i].y);
    }
}

'c' 카테고리의 다른 글

리눅스 IP충돌 체크  (0) 2022.09.08
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
리눅스 usb mount 예제  (0) 2021.07.20
ASCII & 한글 완성형(KSC5601) 출력 소스  (0) 2021.07.08
C관련Etc...  (0) 2021.06.17
Posted by afewgood
,

1. rz
HOST(PC) → Target으로 파일 전송하는 경우 사용
rz¶
File → Transfer → ZMODEM → Send → 파일선택 후 열기 클릭

2. sz Target → HOST(PC)로 파일 전송하는 경우 사용
sz 파일명¶
File → Transfer → ZMODEM → Receive 선택
C:\Users\계정명\AppData\Local\VirtualStore\Program Files (x86)\teraterm\ 파일 저장됨 (Windows10기준)

'etc' 카테고리의 다른 글

PuTTY 보안(ssh)키 저장위치  (0) 2023.08.28
안드로이드스튜디오 맞춤법 검사 해제  (0) 2021.08.13
SK브로드밴드 H614G 모뎀 설정  (0) 2021.07.20
VirtualBox 관련  (0) 2021.07.19
libpng warning: 해결방법  (0) 2021.06.17
Posted by afewgood
,