2015. 7. 24. 21:47

셸(Shell) - 사용자와 리눅스 시스템 사이의 경계면 역할을 하는 프로그램

            - 사용자가 셸을 통해서 명령을 내리면 시스템이 그 명령을 수행


리눅스의 표준 셸은 항상 /bin/sh에 설치

GNU 소프트웨어의 하나인 bash(GNU Bourn-Again SHell) 이다

bash는 리눅스 시스템에 항상 설치, 오픈소스

셸이 /bin/sh에 설치

사용자 로그인시 기본적으로 실행되는 셸도 바로 그것

기본 셸인 /bin/sh/ 프로그램은 사실 /bin/bash 프로그램의 링크

2015. 7. 23. 21:36

지금 구현하는 프로그램은 동영상 파일을 입력 받아 처음의 다섯 프레임을 ppm 파일로 저장하는 프로그램이다


프로그램의 큰 흐름은 다음과 같다

  1. 파일을 연다. - FileOpen( )
  2. 스트림의 정보를 얻는다. - GetStreamInformation( )
  3. 코텍을 찾는다 - FindCodec( )
  4. 디코딩한다 - Decode( )


Streamer 클래스를 선언하고 다음과 같이 구현한다


생성자 멤버 변수는 생성자에서 다음과 같이 설정한다


소멸자는 다음과 같이 구현한다


파일을 여는 함수는 다음과 같이 구현한다


스트림의 정보를 얻는 함수는 다음과 같이 구현한다


코덱을 찾는 함수는 다음과 같이 구현한다


디코딩하는 함수는 다음과 같이 구현한다


프레임을 저장하는 함수는 다음과 같이 구현한다


미디어 타입을 문자열로 변환하는 함수는 다음과 같이 구현한다


나머지 하나의 함수는 다음과 같이 구현한다


main( ) 함수는 다음과 같이 구현한다

2015. 7. 23. 21:07

FFMPEG 라이브러리 파일 다운로드


위의 링크로 들어가서 빌드된 다음 파일을 다운 받는다

 

 

파일을 다운 받은 후 압축을 푼다

 

Shared 폴더 안에서 bin 파일을 복사하여 링크를 한다

 

Dev 폴더 안에서 include, lib를 복사하여 링크를 한다

 

다음의 헤더파일을 포함한다

 

extern "C"{
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}

 

필요한 라이브러리만 링크하면 되지만 다음의 파일을 링크한다

 

lib 파일

avcodec.lib

avdevice.lib

avformat.lib

avutil.lib

postproc.lib

swresample.lib

swscale.lib

2015. 7. 21. 14:58

CentOS7을 설치하는 과정에서 네트워크 디바이스 이름이 enp2s0, em0 등 

예상하지 못한 이름을 보게 될 것이다.

요즘 서버 시스템은 내장 네트워크 카드, PCI 네트워크 카드, USB 네트워크 카드등

다양한 장치를 장착하고 있다.

전통적인 ethx 방식의 네트워크 이름은 다양한 네트워크 인터페이스를 

구분하기 어려운 점이 있고 장치추가, 제거 시 이름이 바뀌는 경우도 있었다

이러한 문제를 해결하기 위해 CentOS7부터는 일관된 네트워크 디바이스 이름과

예측 가능한 네트워크 디바이스 이름을 제공한다

CentOS7의 systemd는 다음과 단계로 네트워크 인터페이스 이름을 명명한다


1. 펌웨어 또는 BIOS에서 온보드(on-board) 네트워크 디바이스에 대해

인덱스 번호를 제공한다면 온보드 디바이스 순서에 따라 명명한다. 예)eno1

2. 펌웨어 또는 BIOS에서 PCI 익스프레스 핫 플러그 슬롯 인덱스 번호를 제공한다면

핫 플러그 슬롯 인덱스에 따라 명명한다 예) ens1

3. 하드웨어 커넥터의 물리적 위치에 따라 명명한다 예) enp2s0

4. 네트워크 인터페이스 MAC 주소에 따라 명명한다.

이 방법은 사용자가 선택한 경우가 아니라면, 기본적으로 사용되지 않는다.

예) enxbc5ff41dfaa9

5. 위 모든 방법으로 명명하지 못한 경우 고전적인 방법으로 명명한다 예)eth0


◎ 예측 가능한 네트워크 디바이스 이름
먼저 앞에 2자리로 인터페이스 타입을 결정한다.
1. en : 이더넷
2. wl : 무선LAN
3. ww : 무선WAN

디바이스 네임 이름

포맷

설명

o<index>

온보드 디바이스

eno1

s<slot>[f<function>][d<dev_id>]

핫플러그 슬롯 인덱스

ens1

x<MAC>

MAC 주소

enxbc5ff41dfaa9

p<bus>s<slot>[f<function>][d<dev_id>]

PCI 위치

enp2s0

p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]

USB 포트 넘버

enp3s5


일관된 네트워크 디바이스 이름

디바이스

예전이름

일관된 네트워크 디바이스 이름

임베디드 네트워크

인터페이스(LOM)

ethx

emx

em0

PCI 카드

네트워크 인터페이스

ethx

p<슬롯>p<이더넷 포트>

p3p2

가상 function

ethx

p<슬롯>p<이더넷 포트>_<가상인터페이스>

p3p2_1


일관된 네트워크 디바이스 이름은 biosdevname=1으로 
커널 옵션에 설정된 경우에 사용된다. 
Dell서버의 경우 기본으로 설정되어 있으며 이러한 부분을 제거하고 싶다면, 
커널 옵션에 biosdevname=0을 넣어 사용하지 않을 수 있다.


2015. 7. 20. 22:51

전통적으로 리눅스에서, 네트워크 디바이스는 ethX의 이름이 주어진다

여기에서 X는 0부터 시작해서 증가하는 정수다.

이것의 결점은 어느 물리적 네트워크 포트가 어느 ethX 이름을 가질 것인지 

알 수 있는 결정적인 또는 일치하는 방법이 없다


여기서의 가정은 네트워크 매니저(NetworkManager)는 삭제되었고

네트워크 대몬(Network Daemon)이 사용될 것이다


다음 스텝을 따른다

1. 각각의 인터페이스에 할당되는 네트워크 디바이스 이름을 정하라

2. /etc/udev/rules.d/70-persistent-net.rules 파일을 생성하라

( vi /etc/udev/rules.d/70-persistent-net.rules)

3. 현재의 맵을 생성하기 위한 각각의 네트워크 인터페이스에 원하는 이름을 넣고 빼라

4. 원하는 이름을 반영하기 위해 /etc/sysconfig/network-scripts/ifcfg-X 를 이름을 바꾸고 변경하라.

5. 맥 주소와 디바이스 이름 맵을 생성하기 위해 /etc/udev/rules.d/70-persistent-net/rules 파일을 편집하라

6. 이 변경을 적용하기 위해 머신을 재부팅해라