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
,

리눅스 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
,

#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
,

리눅스 usb mount 예제

c 2021. 7. 20. 15:02

[afewgood@ubuntu]# mount -t vfat /dev/sda1 /mnt/usbmem
[afewgood@ubuntu]## cd /mnt/usbmem/

{
    int result;
    char chCmd[128];

    //mount
    result = mount("/dev/sda1", "/mnt/usbmem", "vfat", MS_RDONLY, NULL);
    memset(chCmd, 0x00, sizeof(chCmd));
    strcpy(chCmd, "cp /mnt/usbmem/5.png /images/blue/default_type.png");
    system(chCmd);
    sync();

    //umount
    result = umount("/mnt/usbmem");
}

'c' 카테고리의 다른 글

리눅스 IP충돌 체크  (0) 2022.09.08
리눅스 정규식을 이용한 IP / Email 주소 체크  (0) 2022.09.06
구조체 배열 인자로 넘겨서 채우기  (0) 2022.08.11
ASCII & 한글 완성형(KSC5601) 출력 소스  (0) 2021.07.08
C관련Etc...  (0) 2021.06.17
Posted by afewgood
,

{
    int i;
    //int x=0, y=0;
    //int w, h;
    char string[4]={0,};

    printf("ascii[95] display\n");
    for(i=32; i<127; i++)
    {
        string[0] = i;
        printf("[0x%02x]%s\n", string[0], string);
    }

    printf("hangul_wan[2350] test\n");
    for(i=0xb0a0; i<=0xc8fe; i++)
    {
        char third=(i>>4)&0x000f;
        if(third < 10)    continue;    //두번째 바이트의 상위 nibble은 A~F의 값을 가진다.

        string[0] = i>>8;
        string[1] = i&0x00ff;

        if(string[1]==0xa0 || string[1]==0xff)    continue;    //두번째 바이트의 값이 0xa0 이거나 0xff인 경우 한글 코드 존재하지 않음
        printf("[%#.04x]%s\n", i, string);

/*
        LCD_GetTextSize(string, &w, &h);       
        if(x >= (LCD_WIDTH_PIXEL-w))
        {
            x = 0;
            y += h;
        }

        if(y >= (LCD_HEIGHT_PIXEL-h))
        {
            y = 0;
            KBD_GetCh();
            LCD_Clear();
        }

        LCD_GotoXY(x, y);
        LCD_PutCh(i);
        LCD_Where((unsigned int*)&x, (unsigned int*)&y);
*/
    }
}

'c' 카테고리의 다른 글

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

C관련Etc...

c 2021. 6. 17. 11:40

01) Endian check
int endian(void)
{
int i = 0x00000001;

if (((char*)&i)[0])
return LITTLE_ENDIAN;
else
return BIG_ENDIAN;
}

02) .h파일 만들기
#ifndef __FILE_NAME_H__
#define __FILE_NAME_H__

#ifdef __cplusplus
extern "C"{
#endif

#define SYS_ENDIAN_BIG 0
#define SYS_ENDIAN_LITTLE 1

int endian(void);

#ifdef __cplusplus
}
#endif

#endif

03) 헤더파일은 컴파일 되는 것이 아니라 .c가 컴파일 되기 전에 전처리과정을 중 소스 내에 필요한 내용을 삽입하는 역할을 한다. 다만 global 변수를 헤더파일에 선언할 경우, 여러 소스파일에서 해당 변수를 사용할 때 컴파일러는 하나의 변수로 link하지 못하고 중복선언으로 알게된다. 따라서 초기화할 소스파일(.c)에서 선언을 하고 다른 소스파일에서는 extern으로 변수를 가져와서 사용해야 한다  
04) typedef
typedef가 하는 일은 기존의 Data형으로 새로운 Data형을 만드는 것.

Posted by afewgood
,