version="$(wget -q -O - http://sourceforge.net/projects/opencvlibrary/files/opencv-unix | egrep -m1 -o '\"[0-9](\.[0-9]+)+' | cut -c2-)"

echo "Installing OpenCV" $version

mkdir OpenCV

cd OpenCV

echo "Removing any pre-installed ffmpeg and x264"

sudo apt-get -qq remove ffmpeg x264 libx264-dev

echo "Installing Dependenices"

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils cmake qt5-default checkinstall

echo "Downloading OpenCV" $version

wget -O OpenCV-$version.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/$version/opencv-"$version".zip/download

echo "Installing OpenCV" $version

unzip OpenCV-$version.zip

cd opencv-$version

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

make -j2

sudo checkinstall

sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

sudo ldconfig

echo "OpenCV" $version "ready to be used"


다운 받고 설치할 디렉토리에서 vi 등 편집기를 통해 위 스크립트를 opencv.sh 파일명으로 저장한다.


터미널을 열고 파일을 저장한 위치로 이동한 후 아래 명령어를 실행한다.


$ chmod +x opencv.sh


$ ./opencv.sh



그외 테스트 코드 등은 아래 출처 참고 


출처 : http://ledgku.tistory.com/59 (feat. 동키)

1부터 50까지 숫자 중에 랜덤하게 생성된 숫자를 찾는 소소한 게임

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

#define found 0
#define notfound 1

main()
{
    int e_num, num, i, yn=notfound, max=51, min=0;
       
    srand(time(NULL));    /* srand 함수 안써주면 rand함수가 똑같은 숫자만 만들어냄 */
    num = rand() % 50 + 1;

    printf("숫자를 입력하세요(1-50) : ");
    scanf("%d", &e_num);

    while(yn)
    {
        if(num > e_num && min < e_num){
            printf("찾아야 할 숫자가 더 높습니다.\n");
            min = e_num;
            printf("숫자를 입력하세요:");
            scanf("%d", &e_num);
        }
        else if(num < e_num && max > e_num){
            printf("찾아야 할 숫자가 더 낮습니다.\n");
            max = e_num;
            printf("숫자를 입력하세요:");
            scanf("%d", &e_num);
        }
        else if(num == e_num){
            printf("숫자를 찾았습니다 !\n");
            yn = found;           
        }
        else if(e_num >= max || e_num <= min){
            printf("범위 내의 다른 숫자를 입력해주세요(%d-%d) :", min+1, max-1);
            scanf("%d", &e_num);
        }
        else if(e_num == 51 || e_num == 0){
            printf("범위 내의 다른 숫자를 입력해주세요(%d-%d) :", min+1, max-1);
            scanf("%d", &e_num);
        }
        else{
            printf("error!!");
        }

    }
   
}

심심해서 막 만든거라 지저분 ...


Virtual Jail(이하 V_Jail)을 만들 때 꼭 필요하던 것이었는데 우연히 Begging Linux Programming 4th Edition  목차를 보고 발견!
이 글은 한 프로세스가 서버가 되고 다른 한 프로세스가 클라이언트가 되어 서로 통신을 하는 방식입니다.
또 서버가 되는 프로세스는 데몬으로 작동합니다.
V_Jail에 적용시키기 전에 잠깐 테스트 삼아 만든 코드라서 불필요한 내용도 있고 틀린 곳도 있습니다.

헤더파일인 fifo.h 소스코드


#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>

#define SV_FIFO_NAME "/tmp/fifo/sv_fifo"    // 서버가 읽고 쓸 fifo 파일 경로
#define CL_FIFO_NAME "/tmp/fifo/cl_%d_fifo"  // 클라이언트가 읽고 쓸 fifo 파일 경로
struct data_to_pass_st
{
pid_t client_pid;
};


 


서버가 될 fifotest1 의 소스코드


#include "fifo.h"
#include <ctype.h>

int main()
{
        int sv_fifo_fd, cl_fifo_fd;
        struct data_to_pass_st fifo_data;
        int read_res;
        char cl_fifo[256];
        char test[128];

        mkfifo(SV_FIFO_NAME, 0777);
        sv_fifo_fd = open(SV_FIFO_NAME, O_RDONLY);
        if (sv_fifo_fd == -1)
        {
                exit(EXIT_FAILURE);
        }


        while(1)  // 지속적으로 서버역활을 하기 위해 계속 작동
        {
                read_res = read(sv_fifo_fd, &fifo_data, sizeof(fifo_data));
                if (read_res >  0)
                {
                        sprintf(cl_fifo, CL_FIFO_NAME, fifo_data.client_pid);
                        cl_fifo_fd = open(cl_fifo, O_WRONLY);

                        if(cl_fifo_fd != -1)
                        {
                                sprintf(test, "touch /tmp/fifo/success%d", fifo_data.client_pid);
                                // 클라이언트의 PID로 통신 성공의 의미로 파일 생성
                                // 이 if 문 안에는 서버측에서 클라이언트가 보낸 데이터를 읽어들였을 때 실행될 코드
                                system(test);
                                write(cl_fifo_fd, &fifo_data, sizeof(fifo_data));
                                close(cl_fifo_fd);
                        }
                }
        }
        close(sv_fifo_fd);
        unlink(SV_FIFO_NAME);
        exit(EXIT_SUCCESS);
}


클라이언트가 될 fifotest2 의 소스코드

#include "fifo.h"
#include <ctype.h>

int main()
{
        int sv_fifo_fd, cl_fifo_fd;
        struct data_to_pass_st fifo_data;

        char cl_fifo[256];

        sv_fifo_fd = open(SV_FIFO_NAME, O_WRONLY);
        if(sv_fifo_fd == 1)
        {
                exit(EXIT_FAILURE);
        }

        fifo_data.client_pid = getppid();
        sprintf(cl_fifo, CL_FIFO_NAME, fifo_data.client_pid);
        if(mkfifo(cl_fifo, 0777) == -1)
        {
                exit(EXIT_FAILURE);
        }

        write(sv_fifo_fd, &fifo_data, sizeof(fifo_data));
        cl_fifo_fd = open(cl_fifo, O_RDONLY);
        if(cl_fifo_fd != -1)
        {
                if(read(cl_fifo_fd, &fifo_data, sizeof(fifo_data)) > 0 )
                {
                        printf("Success!\n");
                        // 서버측에서 통신을 성공했고 클라이언트 측에서도 통신이 성공하면 실행될 코드
                }
                close(cl_fifo_fd);
        }
        close(sv_fifo_fd);
        unlink(cl_fifo);
        exit(EXIT_SUCCESS);
}



실행 확인

 
언어도 제대로 모르는 상태에서 급하게 습득한 내용들이라서 제대로된 설명을 쓰기가 어렵내요.
참고자료는 위에 적혀있는 Begging Linux Programming 4th Edition과 구글링을 이용했습니다.

' 2016년 이전 > Progamming' 카테고리의 다른 글

[펌]우분투에서 OpenCV 설치  (0) 2016.07.23
[C언어] 심심해서 만든 숫자 찾기  (0) 2011.11.30

+ Recent posts