본문 바로가기

개발 이야기/리눅스 이야기19

리눅스 C 기본 소켓통신 안녕하세요 마블랑입니다. 리눅스에서 C를 이용한 소켓프로세스를 구현할때 사용가능한 예제코드를 구현해보았습니다. C#에서도 동일한 소켓통신 관련된 내용을 포스팅한적이 있는데요 그것을 리눅스에서 C로 구현했다고 보시면 됩니다. 예제 샘플의 화면을 보겠습니다. 왼쪽 위에 화면이 서버이고 오른쪽 아래 화면이 클라이언트입니다. C#과 동일하게 클라이언트에서 메시지를 입력하면 서버로 전송되고 서버는 메시지를 표시하는 동시에 다시 클라이언트에게 보내주는 echo 서버입니다. 종료역시 동일하게 클라이언트에서 'exit'를 입력해주시면 됩니다. 그럼 코드를 살펴보겠습니다. 각각 주석을 달아놓았습니다. 기존 소켓통신 흐름을 알고있다면 어렵지 않게 이해할수 있을듯 합니다. 1. Server #include #include .. 2019. 7. 2.
리눅스 C 현재시간 구하기 안녕하세요 마블랑입니다. 리눅스에서 C 프로세스를 구현할떄 사용이 가능한 현재 날짜 구하기 코드입니다. time.h 파일에서 제공되는 기능을 이용하여 구현하였습니다. 년도의 경우 +1900을 더해줘야 올해 년도가 나옵니다. localtime으로 전달받는 날짜는 1900년도를 첫해로 시작해서 시스템에겐 1900년이 0년인 셈이죠. 그래서 1900을 더해줘야합니다~ #include #include void main(void) { time_t ct; struct tm tm; ct = time(NULL); tm = *localtime(&ct); printf("Result(Today Date) : %04d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year + 1900, tm.tm_mon + .. 2019. 7. 1.
리눅스 환경변수 등록하기(환경변수 영구 등록) 안녕하세요 마블랑입니다. 이번 포스팅은 터미널 창에서 리눅스 Ubuntu(우분투)의 환경변수를 등록하는 방법에 대해서 소개하겠습니다. 먼저 현재 리눅스에 등록된 전체 환경변수를 보려면 터미널창에 "printenv" 라고 커맨드를 입력하고 엔터를 쳐주세요^^ 아래와 같이 모든 환경변수를 볼수 있습니다. 실제로는 더 많지만 화면이 모두 보이지 않아 일부만 캡처 했습니다. printenv를 입력하면 너무 많은 환경변수가 표시되어서 보고싶은 환경변수를 찾지 못할때 개별적인 환경변수를 표시할수 있습니다. echo 명령어를 이용하여 "echo $[환경변수]" 을 입력하여 엔터를 처주세요^^ 마블랑도 명령어를 확인해보면서 한가지 실험을 하였는데 환경변수는 대소문자를 구분하여 서로 다른 환경변수라고 인식을 하니 대소문.. 2019. 6. 28.
[C] char array to int, char array to double 안녕하세요 마블입니다. 프로그래밍을 하면서 형변환 해줘야할때가 굉장히 많죠 C#이나 자바같은경우에는 형변환 기능이 클래스로 제공되어서 간편하게 할수있습니다. C언어는 이러한 클래스가 없어서 직접 헤더파일을 Include 하고 함수를 직접 찾아봐야 하기때문에 이번 포스팅의 주제로 삼았습니다. 아래 코드는 예제 코드입니다. 구분하기 쉽게 원본, 형변환 순으로 단락을 나눠놨는데요 문자열을 정수형으로 바꾸는 것은 atoi() 함수를, 문자열을 실수형으로 바꾸는 것은 atof()함수를 이용하시면 됩니다. 헤더파일은 stdlib.h 입니다. 그리고 반대의 경우도 itoa()와 ftoa() 함수로 구현을 하였습니다. 그런데 컴파일을 해보니 에러가 발생합니다.... 해당 함수들이 존재하지 않는다고 에러를 알려주는군요... 2019. 6. 24.
Linux Ubuntu C 정적 라이브러리 생성하여 사용하기 안녕하세요 마블랑입니다. 프로그램을 개발하면서 하나부터 열까지 개발을 하는 경우는 공부를 위해 하는 것이 아니라면 거의 없다고 보면됩니다. 기본적으로는 미리 구현되어 있는 출력이나 입력 등 기본 함수를 사용할 것이고 필요에 따라서 오픈소스나 상용 라이브러리를 이용하여 프로그램의 생산성을 증대 시킬수 있습니다. 그렇게 배포되는 라이브러리는 배포를 할때 코드를 공개하지 않고 사용할 수 있게 해주기 때문에 배포하는 곳은 안심하고 배포를 할수 있습니다. 그렇게 자신이 만든 기능을 코드공개 없이 배포를 하려면 라이브러리 형식으로 배포를 하면 됩니다. 리눅스에서는 라이브러리가 정적과 동적 두가지 형태로 배포할수 있습니다. 우선은 정적 라이브러리를 생성하는 방법에 대해서 포스팅을 하려고 합니다. 정적라이브러리를 배포.. 2019. 6. 21.
Linux Ubuntu C 공유메모리 사용예제 안녕하세요 마블랑입니다. 리눅스 우분투에서 사용할수 있는 C언어로 구현한 공유메모리 예제를 공유합니다. 하나씩 공부를 하며 구현을 했기 때문에 자세한 설명은 못하더라도 바로 사용할수 있게끔 에러처리를 해두었습니다 ^^ 먼저 예제 프로세스를 설명하겠습니다. 왼쪽화면에서 메시지를 입력하여 공유메모리에 저장합니다. 그러면 오른쪽 프로세스가 매 1초당 공유메모리에 접근하여 데이터를 불러온 다음에 화면에 표시해주는 역활을 하고 있습니다. 다음은 코드를 살펴보겠습니다. 왼쪽 프로세스인 공유메모리 메인이라는 프로세스 입니다. 1. 공유메모리 메인 공유메모리의 ID를 생성하고 공유메모리의 버퍼를 할당합니다. 그 뒤에 반복문을 통해서 공유메모리에 저장할 데이터를 입력받습니다. 'quit'을 입력하면 반복문이 종료되고 공.. 2019. 6. 21.
리눅스 매개변수를 활용하여 데이터베이스에 데이터 입력하기 안녕하세요 마블랑입니다. 이번에는 ODBC를 이용하여 Insert 하는 예제와 Main함수 명령인수를 통해 사용자 정의 데이터를 데이터베이스에 입력하는 예제에 대해서 포스팅 하겠습니다. Insert예제와 Main함수 명령인수에 대한 예제를 찾으시는 분은 이전 포스팅 목록을 참고해도 되지만 이번 포스팅을 통해서도 활용 예제를 찾을수 있습니다. 코드는 지난번에 사용했던 두개의 예제를 합쳐놓은 코드입니다. (지난번 설명을 다 해놔서 이번에는 굳이 안하겠습니다^^) 프로세스를 실행해보겠습니다. 한번 실행시 한개의 데이터만 입력되기 때문에 여러개의 데이터 입력을 원하면 여러번 실행해야합니다... 그럼 실행결과를 확인해보겠습니다. main함수 명령인수를 통해 처음으로 구현해본 프로세스입니다. 지금은 별볼일없지만 잘.. 2019. 5. 1.
리눅스 C 명령인수 매개변수 argv 형변환 안녕하세요 마블랑입니다. 프로그래밍 언어에서 함수라면 매개변수를 지정하여 변동되는 데이터를 입력할수 있습니다. C언어에서 가장 기본이 되는 Main함수도 함수이기 때문에 그러한 기능을 가지고 있는데요. Main함수는 프로세스가 시작될때 제일 처음에 시작하는 함수인데 어떻게 데이터를 지정해야할지 모르는 분들이 있을거 같아 Main함수의 매개변수를 설명하려고 합니다. 일단 Main 함수의 매개변수 입력은 다음과 같이 지정합니다. ./(실행프로세스명) (첫번째인자), (두번째인자), (세번째인자) 아래 화면의 para 프로세스는 매개변수 3개를 입력받아 출력하는 프로세스입니다. 입력된 매개변수와 출력된 매개변수는 무지개 색상으로 순서대로 표시해두었습니다. 보는것과 같이 맨앞에 Cnt 개수가 4로 나오듯이 실행.. 2019. 5. 1.
리눅스 C ODBC 데이터베이스 연동 SQLBindParameter Insert 예제(linux C ODBC example, unixodbc) 안녕하세요 마블랑입니다. 지난번 포스팅으로 리눅스 환경에서의 ODBC를 이용하여 데이터베이스 데이터를 가져오는 Select 예제를 해보았습니다. 이번에는 데이터베이스에 데이터를 삽입하는 Insert 예제에 대해서 진행해보겠습니다. Insert 예제도 Select 예제도 모두 DB에 접속정보는 갖기 때문에 ODBC에 연결하는 코드 상단 부분은 동일합니다. 그래서 전체코드는 첨부파일을 확인하시고 바뀌는 부분에 대해서 간단히 설명만 확인하시기 바랍니다. 우선 SQLPrepare 와 같이 Insert Query 문을 작성해줍니다. 이때 중요한것은 values 부분에 삽입하는 컬럼 개수만큼 '?' 로 채워주시기 바랍니다. 그 다음은 SQLBindParameter 함수를 이용하여 Insert Query 문 valu.. 2019. 5. 1.
리눅스 C ODBC 데이터베이스 연동 (select 예제, linux C ODBC example, unixodbc) 안녕하세요 마블랑입니다. 지난번 ODBC를 설치하고 DSN을 설정하였습니다. 이번에는 등록된 ODBC를 이용하여 C 프로세스를 만들어서 맞게 등록이 되었는지 확인해보겠습니다. 먼저 시작에 앞서 지난번 ODBC 등록된 것에서 약간의 추가 설명을 드리려고 합니다. 아래 화면에서 "temp1"이라는 DSN은 이번에 샘플을 제작해보며 새로 추가한 DSN인데요 화면에 표시된 DATABASE 부분은 실제로 사용할 Mysql의 데이터베이스 입니다. Mysql 커맨드로 use (데이터베이스명) 여기서 데이터베이스명을 가리킵니다. DSN 등록 커맨드는 아래 표시된 부분을 사용할 데이터베이스명으로 수정하시면 됩니다. 이제 본격적으로 C 프로세스 ODBC 연동에 대해서 설명을 하겠습니다. 하지만 또 앞서 이전에 만들어 놓은.. 2019. 4. 26.
우분투18.04에 Mysql 5.7 ODBC 등록하기(unixodbc 설치, mysql-connector 설치, libmyodbc 설치 에러, Ubuntu, 데이터베이스) 안녕하세요 마블랑입니다. 지난번 우분투에서 Mysql 계정을 추가하고 특정 테이블을 사용할수 있도록 권한을 추가하였습니다. 그래서 Mysql에 Root 계정을 사용하지 않고 사용자계정을 이용하여 접속할수 있습니다. 그런데 이렇게만 해서는 프로세스에서 데이터베이스를 바로 연결할수 없습니다. 그러므로 ODBC를 설치하여 프로세스에서 Mysql 데이터베이스를 연동하는 방법에 대해서 알려드리겠습니다~ 처음에는 우분투에서 ODBC 드라이버를 사용할수 있도록 unixodbc를 설치해줍니다. unixodbc는 윈도우로 치면 ODBC 관리자라고 보시면 됩니다~ sudo apt-get install unixodbc unixodbc-dev unixodbc-bin unixodbc-dev와 unixodbc-bin 부분은 생략.. 2019. 4. 24.
우분투 에서 Mysql DB 새로운 계정 추가 및 권한 주기 (Ubuntu, grant, create user) 안녕하세요 마블랑입니다. 지난번 우분투에 Mysql DB를 설치하고 Root 계정의 비밀번호를 설정하였습니다. 앞으로는 이 Mysql DB를 이용하여 프로세스의 데이터를 저장하려고 합니다. 그렇다면 Root 계정이 아닌 사용자 계정이 따로 있어야겠죠? (실무에서도 보안때문에 필요할 것입니다.) 그래서 이번에는 Mysql에 사용자 계정을 추가하고 특정 DB를 사용할수 있는 권한을 주는 방법에 대해서 알아보겠습니다. 우선 사용자 계정이 사용할 데이터베이스를 만들어 보겠습니다. Root 권한으로 Mysql에 접속합니다. (접속방법은 지난번 포스팅 참고!) show databases; 커맨드를 입력하여 데이터베이스 목록을 확인합니다. 사용자 계정이 사용할 데이터 베이스를 만들어 보겠습니다. create data.. 2019. 4. 24.
우분투 18.04 버전 MySql Server 5.7 데이터베이스 설치하기(Mysql Root 계정 비밀번호 설정, ERROR 1698 (28000) 해결,Ubuntu, Database, DB) 안녕하세요 마블랑입니다. 이번 포스팅은 리눅스 환경에서 데이터베이스를 설치하고 접속하는 포스팅입니다. 마블랑도 해보면서 많은 분들의 도움을 받았으므로 하나하나 빠짐없이 포스팅을 하기 때문에 다른분들도 쉽게 할수 있을거라 믿습니다. 우선 우분투에 Mysql 이 설치되어있는지 확인을 해보겠습니다. cat /etc/init.d/mysql 파일이 없다고 나오면 설치가 안된것이므로 설치를 진행해도 됩니다. 다음은 이미 해놓은 분들도 있을수도 있지만 안한 분들을 위해 apt-get을 업데이트 하겠습니다. (리눅스는 커맨드로 무언가를 설치하는게 잘되어있어서 편리한거 같습니다) sudo apt-get update 설치가 완료되면 이제 본격적으로 Mysql Server를 설치하겠습니다. sudo apt-get insta.. 2019. 4. 24.
우분투 LTS 버전에 대해서 알아보자! 일반 버전과 LTS버전의 차이 (Ubuntu, Long Term Support) 안녕하세요 마블랑입니다. 지난번 가상머신을 설치하고 우분투를 실행하는 포스팅을 했었습니다. 그런데 우분투를 다운받는 페이지에서 제품이름에 버전 넘버만 있는 제품이 있다고 하면 버전 넘버 다음에 LTS라고 붙은 제품이 있었습니다. 처음 다운받는 분들은 이 두 버전의 차이를 몰라 무엇을 선택해야 할지 모를텐데 그 차이점에 대해서 간단히 설명하려고 합니다. LTS는 "Long Term Support"의 약자입니다. 직역하자면 "긴 기간동안 지원"이라는 뜻입니다. 이 말은 즉, 윈도우 업데이트 마냥 리눅스 업데이트가 있는데 이 업데이트를 오랜 기간동안 지원을 해준다는 말입니다. 이제 윈도우7이 출시되고 10년이 넘어 마이크로소프트에서도 사용을 자제하라고 하죠.. 바로 보안때문입니다. 운영체제는 보안때문에 업데이.. 2019. 4. 24.
가상머신을 사용하여 Window에서 Linux 환경을 구축하기- 05. Ubuntu vim 설치하기 (VMWare Player, Ubuntu, 우분투 18.04 vi에디터 vim로 설치) 안녕하세요 마블랑입니다. 가상머신을 사용하여 Window에서 Linux 환경을 구축하기를 통해 설정하고 있는 우분투 환경이 슬슬 자리를 잡아가고 있습니다. 이번 포스팅은 리눅스 개발자들이 많이 사용하는 vi 에디터를 좀더 편하게 사용할수 있는 vim을 설치해보도록 하겠습니다. 우분투를 처음 실행하고 vi에디터를 실행하면 방향키도 안먹고 백스페이스키도 안먹고 합니다. 아마도 초기 vi에디터를 만든 사람이 업데이트를 안해서 그런가 싶습니다. (마블랑도 잘 모르지만 초기 방향키가 없었던 키보드로 인해 이렇게 만들어진것이라는 생각이 드는군요) 그러므로 vi에디터에서 좀 더 사용하기 쉬운 vim 에디터를 설치해보도록 하겠습니다. 터미널을 열고 다음과 같이 입력을 하시고 설치를 하시면 됩니다. sudo apt-ge.. 2019. 4. 23.