본문으로 바로가기
homeimage

컴퓨터/프로그래밍

해당되는 글 307
  • thumbnail
    컴퓨터/프로그래밍

    C언어 포인터 쉽게 이해하기 2부

    C언어 포인터 이해하기 1부에 이어 2부 글입니다. 이전에는 배열과 비교하여 포인터에 대해 알아 보았는데요, 이번에는 C언어의 포인터에서 아리까리 헷깔리는 부분에 대해서 알아보겠습니다. 이 글도 포인터를 학습 수준에서 알기는 아는데 정확히 모르는 분을 위한 내용입니다. C언어 포인터 변수 타입별 차이 C언어의 포인터는 주소를 갖는 정수형 변수이지만, 다른 변수처럼 char, short, int, long 등으로 선언합니다. 그렇다면 char *ptr1하고 int *ptr2하고 어떤 점이 다를까요? ptr1보다 ptr2의 변수 크기가 더 클까요? C언어는 변수 사용이 다른 언어에 비해 매우 자유로운데요, C언어로 코딩하다가 다른 언어로 바꾸면 한동안 어려움을 느낄 정도입니다. 다른 언어는 문자 변수로 선언..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 포인터와 배열 쉽게 이해하는 방법 1부

    이 글은 C의 포인터를 학습 수준에서 알기는 아는데 정확히 모르는 분을 위한 글입니다. C언어를 학습하다 보면 대부분 포인터가 제일 어렵다고 합니다. 프로그래밍 경력자도 C언어는 자유도가 높아서 불만인 분이 많습니다. 너무 헷갈린다는 것이죠. 오죽하면 읽기 어렵고 이해하기 어려운 C언어 프로그래밍 대회 IOCCC(International Obfuscated C Code Contest)가 열렸겠습니까. 출품 작을 보았는데, 오우~ 도대체 뭔 소리인지. 당연히 포인터가 들어갑니다. 문제 1) printf( "%c\n", 1["badayak.com"+1]); 아주 간단한 코드인데 결과가 예상되시나요? 포인터 없이 배열로 작성되었지만, 포인터를 알아야 쉽게 이해되는 내용입니다. C언어를 학습하시다 보면 포인터는..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 변수 크기 구하기 sizeof()

    C sizeof() 자료형 변수 크기 구하기 함수 인수로 받은 자료형 변수 크기를 바이트 단위로 구한다. 헤더: stdio.h 형태: unsigned long sizeof( 자료형) 인수: 자료형 크기를 구할 자료형 반환: unsigned long 자료형의 바이트 단위 크기 sizeof() 예제 #include int main( void) { char v_char; int v_int; long v_long; char *p_char; int *p_int; long *p_long; printf( "v_char =%ld\n", sizeof( v_char)); printf( "v_int =%ld\n", sizeof( v_int)); printf( "v_long =%ld\n", sizeof( v_long)); p..
  • thumbnail
    컴퓨터/프로그래밍

    윈도우와 리눅스를 함께 사용하는 방법 4가지

    윈도우와 리눅스 함께 사용하는 이유 개발자마다 의견이 다르겠지만, 24시간 돌아야 하는 시스템의 경우 윈도우보다는 리눅스가 더 안전하다고 생각합니다. 요즘은 작은 시스템도 네트워크에 연결해서 전체 시스템을 모니터링하고 관리하는 시대라서 네트워크의 중요성은 더욱 높아졌습니다. 윈도우도 네트워크 기능은 훌륭하지만, 리눅스는 태생부터 멀티 유저 시스템인 유닉스에서 나왔고 오랜 역사 동안 서버로서의 안정성과 네트워크의 강력함을 갖추었습니다. 그래서 24시간 1년 12달 운영하는 시스템은 윈도우보다는 리눅스를 많이 사용하는 것으로 알고 있습니다. 모든 현장을 확인한 내용이 아니고 들은 얘기로만 유추한 것이라서 윈도우 개발자가 들으면 펄쩍 뛸지 모르겠습니다. 윈도우도 계속해서 발전해 왔기 때문에 예전에 비해 안정성..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 rs232 시리얼 통신 프로토콜 주의 사항

    시리얼 통신 패킷에 데이터 길이? 업체로부터 rs232 시리얼 통신 장비를 받았는데요, 프로토콜 문서에 언급된 패킷 구성을 보니 걱정스러운 부분이 있네요. 바로 데이터의 바이트 개수를 알려 주는 길이(Length) 요소인데요, 외부 영향에 약한 시리얼 통신에서 데이터의 크기를 알려 주고 그만큼 받으라는 것은 옳지 않다고 생각합니다. 시리얼 통신에서 길이를 넣어도 문제없다면 ETX를 사용할 이유가 없습니다. 만일 길이는 데이터 검증용이라고 한다면 CRC가 있으므로 이것도 이유가 못 됩니다. 그러나 LEN을 사용하는 시리얼 장비가 의외로 많습니다. 데이터가 모두 텍스트라면 더욱 이해가 안 되는데요, 이런 경우 굳이 LEN을 알려주지 않아도 ETX까지만 받으면 되거든요. 그렇다면 통신에서는 LEN을 사용해서는..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 로그파일 작성 방법

    프로그래머의 방패막이 로그 파일의 중요성 프로그램 실행 중에 생성되는 로그 파일은 디버깅에 매우 중요한 자료가 되고 억울함을 풀 수 있는 단초가 되어서 반드시 로그 생성 코드를 작성해야 합니다. 프로그래머라면 로그의 중요함을 잘 알 텐데요, 그럼에도 소홀하게 되고 기능 작성에만 치중하게 됩니다. 바쁘기도 하고 시간이 없을 수도 있지만, 로그 파일을 만드는 것은 습관과도 관계있지 않나 싶습니다. 부지런한 프로그래머라고 해서 로그 파일을 꼭 만들고, 게으른 프로그래머라서 무시하는 것은 아닌 것 같습니다. 번거롭기도 하고 귀찮기도 하지만, 디버깅하는 수고를 덜고 억울한 경험을 피하기 위해서도 로그 파일은 반드시 작성하는 것이 좋은데요, 개인적으로 사용하는 팁 몇 가지를 소개합니다. 로그 생성은 쉬워야 합니다...
  • thumbnail
    컴퓨터/프로그래밍

    C언어 심볼릭링크 정보 구하기 readlink()

    readlink() function in C language C함수 readlink()는 심볼릭 링크의 원래 위치나 파일 정보를 구합니다. readlink()의 주의할 점은 버퍼에 정보를 저장하면서 NULL 코드를 추가하지 않습니다. 그러므로 반드시 버퍼를 초기화한 후에 호출합니다. 헤더: unistd.h 형태: ssize_t readlink(const char *path_name, char *buff, size_t buff_size) 인수: const char *path 심볼릭 링크 이름 char *buff 정보를 받아 올 버퍼 size_t buff_size 퍼버의 크기 반환: ssize_t == -1 실패 > 0 성공시 정보의 바이트 수 C언어 readlink() 함수 예제 심볼릭 링크 /tmp/ln..
  • thumbnail
    컴퓨터/프로그래밍

    rs485 통신 프로토콜 응답 처리 주의 사항

    rs485 통신 특징에 따른 응답 방법 rs485 통신의 특징은 rs232와 rs422과는 달리 반이중(Half Duplex) 통신 방식입니다. 송수신을 동시에 할 수 없고, 물리적으로 두 개의 선을 연결해도 한 개의 통신 라인이라서 rs485가 멀티 드롭(Multi Drop) 다자간 통신이 된다고 해도 규칙을 정하지 않으면 장치 두 대만 물려도 통신을 원활히 할 수 없습니다. rs485는 대부분의 경우 통신에 물린 장치를 마스터와 슬레이브로 나누고 마스터만이 통신 제어권을 가지고 제어합니다. 마스터의 말이 끝날 때까지 모든 슬레이브는 입을 다물고 있어야 하는데요, 마스터가 요청하는 방법도 중요하지만, 슬레이브가 어떻게 응답해야 하는지도 시스템에 따라서 신중히 선택해야 합니다. rs485 통신은 외부 영..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 배열 초기화 함수와 주의사항

    C언어 배열 초기화 함수 두 가지 C언어에서 배열을 초기화할 때 memset()와 bzero() 중 어떤 함수를 사용하시나요? bzero()가 간단해서 편하기도 하지만, 함수 이름이 뭘 하는지 명확해서 소스 코드를 이해하는데 도움을 줍니다. 그러나 이런 장점이 있다고 해도 memset()을 사용하는 것이 좋습니다. 왜일까요? bzero()가 "deprecated 함수"이기 때문인데요, deprecated의 뜻이 "더 이상 사용되지 않는"다는 뜻을 보더라도 하위 호환을 위해 제공되는 것이어서 bzero()보다는 memset()을 사용하는 것을 권합니다. 소프트웨어 기능 중에 "be deprecated"로 언급되어 있다면 더 좋은 것이 나와서 앞으로 이 기능이 없어질지 모른다는 뜻으로 쓰인다는 것을 생각하면..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 링버퍼 구현 방법(Ring Buffer)

    편리한 C언어 링버퍼 프로그램 코딩에서 버퍼는 매우 중요합니다. 사용처에 따라 다양한 방식으로 구현하는데요, 특히 링버퍼(Ring Buffer)는 다목적이라고 할 수 있습니다. 통신을 통한 시스템 제어 프로그래밍에서 버퍼는 매우 중요합니다. 외부에서 제어 신호가 계속 오는데 시간이 걸려서 제 때에 처리하지 못하거나, 반대로 시스템 상태를 계속해서 서버에 전송해야 하는데 갑자기 통신 상태가 불량해지 경우 링버퍼로 문제를 해결할 수 있습니다. 링버퍼는 구현하기 쉽고 버퍼가 모두 찼을 경우 어떻게 처리할지 선택에 따라 구현하기도 수월합니다. 오래된 자료부터 버려가면서 버퍼링하거나 버퍼 오버로 판단하여 에러 처리 루틴을 호출합니다. 링버퍼는 아래와 같은 구조로 되어 있습니다. 링버퍼는 버퍼와 버퍼에 쓰기와 읽기..
  • thumbnail
    컴퓨터/프로그래밍

    모드버스 통신 테스트 프로그램 추천

    마스터 모드버스 통신 테스트 프로그램 ModbusPoll 모드버스 통신 테스트 프로그램은 읽기·쓰기를 요청하는 마스터(Master)와 마스터의 요청을 실행하고 응답하는 슬래이브(Slave)로 나뉩니다. 마스터가 클라이언트이라면 슬레이브가 서버인 것이죠. 모드버스 마스터 통신 테스트 프로그램으로는 ModbusPoll을 추천합니다. 잘 만들기도 했지만, 무엇보다도 공신력이 있어서 다른 개발자와 언쟁하는 불상사를 줄여줍니다. 내가 만든 장비와 통신이 안 된다라고 문의가 오면 ModbusPoll로 확인하라고 하면 끝입니다. ModbusPoll로는 되는데 그 개발자의 프로그램에서는 안 된다면 그분의 코드에 버그가 있는 것입니다. 계속해서 자기 쪽은 이상이 없다고 고집하면 ModbusPoll을 모르냐고 반박하면 됩..
  • thumbnail
    컴퓨터/프로그래밍

    rs485 모드버스 어드레스 맵 정리

    Modbus-RTU address map 모드버스는 슬레이브 장치의 메모리 맵 구성에 따라 읽기·쓰기하여 통신하는 방식입니다. 모드버스 메모리 맵은 코일과 레지스터로 구성되며 메모리 번호에 따라 크기와 접근 방법이 다릅니다. 코일은 비트, 레지스터는 2 바이트 워드로 생각하면 이해하기 쉬운데요, 코일과 레지스터는 읽기·쓰기 모두 되는 영역과 읽기만 가능한 영역으로 나뉩니다. ▲ 모드버스 메모리 맵 영역에 따라 코일·레지스터의 번호 구분과 제어 함수 번호를 정리한 테이블입니다. 어드레스 지정 시 주의 사항 ▲ 서버로 요청하는 모드버스 RTU 프로토콜의 패킷 구성입니다. 메모리 맵에 따라 함수 번호와 주소를 지정해야 하는데, Holding Register 값을 읽겠다고 해서 30001, 30002처럼 만 단..
    최근글
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

    이모티콘을 클릭하면 댓글창에 입력됩니다.