달력

112024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

void 선언

karma( 업 )/C_C++ 2024. 4. 11. 09:01

C/C++ 에서 void type 은 '없음' 을 나타내는 특별한 타입이다.

이 것은 값 자체가 없음을 의미하기 때문에 L Value 가 될 수 없다. 

void a; //void는 값 자체가, 타입이 없기 때문에 선언할 수 없다. 메모리 할당이 불가능

void* pa; // void 포인터는 주소를 가리키는 것이기 때문에 L Value로 사용 가능

 

L Value는 object의 위치 값을 뜻하는 locator value라고도 한다. L Value는 object를 표기할 수 있다는 뜻이다.

void는 object가 없기 때문에 L Value가 될 수 업다.

 

 

 

 

 

 

'karma( 업 ) > C_C++' 카테고리의 다른 글

The Clockwise/Spiral Rule  (570) 2023.10.25
상수 포인터 & 포인터 상수의 차이  (1) 2023.10.25
C/C++ 프로그래밍을 잘하려면  (0) 2020.02.04
*& reference to pointer  (0) 2018.12.03
09. std::tuple( C++11로 가자 )  (0) 2018.11.01
Posted by 생짜
|

'karma( 업 ) > C_C++' 카테고리의 다른 글

void 선언  (0) 2024.04.11
상수 포인터 & 포인터 상수의 차이  (1) 2023.10.25
C/C++ 프로그래밍을 잘하려면  (0) 2020.02.04
*& reference to pointer  (0) 2018.12.03
09. std::tuple( C++11로 가자 )  (0) 2018.11.01
Posted by 생짜
|

const int*는 상수 포인터, int* const는 포인터 상수를 나타낸다.

const는 C++에서 변경 불가 keyword이다.

const가 붙는 위치에 따라 변수 선언이 다른 의미를 가진다.

const가 * 앞에 붙으면 상수 포인터, * 뒤에 붙으면 포인터 상수가 된다.

 

int* n;				// int형 포인터 변수
const int n = 10;   // n 이라는 value 값 자체를 변경 불가
const int* n;       // int형 상수에 대한 포인터, 데이터 상수화, int const* 와 동일
*n = 20;			// n의 주소값이 가리키는 value 값 변경 불가
int* const n;		// int형에 대한 포인터 상수, 포인터의 상수화, n의 주소값 변경 불가
const int* const n;	// n의 value와 주소값 모두 변경 불가, int const* const와 동일

 

상수 포인터 ( const int* //int const* )는 포인터 값은 변경가능하지만 포인터가 가르키는 주소에 있는 값은 변경이 불가능하다. 문자열 자체가 프로그램의 데이터 세그먼트에 있고 변경해서는 안되는 경우에 중요하다

'karma( 업 ) > C_C++' 카테고리의 다른 글

void 선언  (0) 2024.04.11
The Clockwise/Spiral Rule  (570) 2023.10.25
C/C++ 프로그래밍을 잘하려면  (0) 2020.02.04
*& reference to pointer  (0) 2018.12.03
09. std::tuple( C++11로 가자 )  (0) 2018.11.01
Posted by 생짜
|

 

 

'karma( 업 )' 카테고리의 다른 글

SourcTree에 ssh key 등록하기  (0) 2022.03.08
git command 정리  (0) 2020.09.01
제대로, 꾸준히  (0) 2019.12.01
훌륭한 개발자란?  (0) 2019.11.27
GIT 특정 Branch Clone  (0) 2019.11.13
Posted by 생짜
|

VirtualBox에 Ubuntu 20.04 LTS를 설치한 후 samba를 설정했다.

 

1. samba를 위한 VirtualBox Network 설정

설치시 네트워크 설정에서 '어댑터1'을 NAT로 설정했더니 Ubuntu에서는 windows(host)로 ping은 가지만 반대로 windows(host)로 ping이 가지 않아 samba를 설정해도 연결이 되지 않을 것 같았다. VirtualBox의 네트워크 설정을 구글링해서 '어댑터2'에 호스트 전용 어댑터 설정을 했다.

 

< VirtualBox 설치시 기본 network 설정 host에서 ubuntu로 Ping이 안됨 >

 

< host에서 ubuntu로 ping이 되도록 network 설정 >

 

VirtualBox에 설치한 ubuntu를 실행 시킨 후 ifconfig로 host 전용 어댑터와 연결된 IP를 확인한다.

Windows의 cmd 창에서 ipconfig로 VirtualBox Host-Only network의 IP를 확인한다. 상위 세자리가 일치하지 않는 다면 일치하도록 수정한다.

 

2. ubuntu에 samba 설치

  • 저장소 업데이트
    • $sudo apt-get update
  • samba 설치
    • $sudo apt-get install samba
  • samba 패스워드 등록( 기존 ubuntu 유저의 id 사용 )
    • $sudo smbpasswd -a "ubuntu 유저 계정 id"

 

3. samba 설정

  • 문제시 복원용의 samba 설정 파일 백업
    • $cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
  • samba에 등록한 유저의 계정을 이용해 접근할 Directory를 설정

[ubunut] : windows에서 ubuntu로 접근할 때 사용할 경로명

path : samba에 등록한 user가 실제 접근할 수 있는 경로

geust ok : guest 권한

wirteable : 쓰기 권한

create mask : 파일 권한

directory mask : 폴더 권한

valid users : 접근 권한을 가질 수 있는 user ','로 구분하여 여려 계정을 설정할 수 있다.

  • samba 재시작
    • '$sudo service smbd restart' or 'sudo /etc/init.d/smbd restart'

 

4. windlow에서 ubuntu 접근

  • windows에서 탐색기를 열어 호스트 전용 ip를 입력하거나 samba에서 설정한 경로명까지 같이 입력하면 된다.
  • 최초 접속이 samba 설정에 등록한 ubuntu 계정의 id/passwd를 물어본다.

Posted by 생짜
|

Ubuntu 21.04 LTS 버전을 설치하고 Dbus 작업을 하기 위해 

 

#include <dbus/dbus.h>을 선언했다.

컴파일에서 'dbus/dbus.h'이 찾을 수 없다는 'No search file or directory' 에러가 발생했다.

'/usr/include' 폴더에 들어가보니 'dbus-c++1'만 설치되어 있고 'dbus-1.0'은 설치되어 있지 않았다.

 

컴파일을 위해 아래와 같이 dbus-1.0을 설치해 준다.

 

#update the package index
sodu apt-get update

#Install libdbus-1-dev deb package
sudo apt-get install libdbus-1-dev

 

 

자세한 설명은 아래 URL에 가서 확인하면 된다.

Lib Ubuntu 패키지 사이트 URL :

https://ubuntu.pkgs.org/21.10/ubuntu-main-amd64/libdbus-1-dev_1.12.20-2ubuntu2_amd64.deb.html

 

dbus-1.0 install 후 dbus/dbus.h 에서 나는 에러는 사라졌지만 glib main loop 함수를 호출하기 위한 '<dbus/dbus-glib-lowlevel.h>' 에서 동일한 'No search file or directroy'에러가 발생했다.

 

아래 stackoverflow에서 해답을 찾을 수 있었다.

https://stackoverflow.com/questions/14263390/how-to-compile-a-basic-d-bus-glib-example

 

How to compile a basic D-Bus/glib example?

I'm trying to learn how to use D-Bus with C bindings. I've never used D-Bus before. I'm following this tutorial, which I assume is the official one (Freedesktop.org). I've read it until this paragr...

stackoverflow.com

 

sudo apt-get -y install dbus libdbus-1-dev libdbus-glib-1-2 libdbus-glib-1-dev

 

이로써 모든 문제를 해결하고 컴파일 잘 하고 잘 쓰고 있다.

역시 아무리 번역기가 좋아져도 영어 공부는 해야 한다라는 것을 다시 한번 절실히 느꼈다.

Posted by 생짜
|

source tree에 이미 생성한 ssh key를 등록하는 방법에 대해 알아본다.

 

  1. source tree 실행
  2. 메뉴바의 '도구' -> '옵션' 실행
  3. '옵션' 창에서 '일반' 탭 선택, SSH 클라이언트는 'OpenSSH'를 선택, 파일찾기 버튼('...')을 클릭하여 ssh key를 선택 '확인' 버튼 클릭

'karma( 업 )' 카테고리의 다른 글

HMI & SCADA란 무엇인가?  (0) 2023.07.07
git command 정리  (0) 2020.09.01
제대로, 꾸준히  (0) 2019.12.01
훌륭한 개발자란?  (0) 2019.11.27
GIT 특정 Branch Clone  (0) 2019.11.13
Posted by 생짜
|

특정 프로세스의 메모리 사용량과 CPU 사용량을 체크할 경우가 있다. 스크립트로 며칠 테스트 한 결과를 파일로 저장해서 엑셀파일로 그래프를 그리면 편하다.

 

아래는 메모리와 CPU 사용량을 체크하여 파일로 저장하는 스크립트이다.

 

 

#!/bin/bash
#memTest.txt파일을 만들어 출력한다.
echo "Process Name Memory Test Start!!!" | tee memTest.txt 
#memTest.txt 파일에 Append한다.
date | tee -a memTest.txt 

#-e 옵션은 특수 키 출력을 위해서 해준다.
echo -e "\n"
# Tap을 주고 echo에서 줄바꿈을 공백으로 치환한다. 
#echo -e "\t" | tr '\n' ' ' 

#ps에서 [processor name]를 찾아서 pid, mem, cpu 사용량을 표시한다.
ps -C [processor name] -o pid,pmem,pcpu | tee -a memTest.txt

#while loop
while :
do
    #날짜를 출력하고 줄바꿈을 공백으로 변경한다.
    date | tr '\n' ' '
    #헤더없이 ps 정보를 출력한다.
    ps -C [processor name] --no-headers -o pid,pmem,pcpu 
    sleep 60 #초단위, 1분동안 슬립
done

 

 

스크립트를 실행 시키며 아래와 같은 결과를 얻을 수 있다.

 

Posted by 생짜
|

Linux의 Bash Shell 스크립트에서 파일 생성 및 생성된 파일에 스크립트 내용 추가 대해 기술합니다.

 

  • 파일생성 및 생성된 파일에 내용 추가
    • touch( 파일 생성 )
      • 파일의 날짜와 시간을 수정하는 명령어, 0 바이트 파일을 생성하기 위해 사용되기도 한다.
        아무런 옵션없이 사용하면 서버의 현재 시간으로 새로운 파일을 생성한다. 
        $touch [파일명]
      • 옵션
        • -a : 현 시간으로 파일의 접근 시간, 변경 시간을 수정한다.
          $touch -a [파일명]
        • -c : 기존 파일이 없으면 파일이 생성되지 않는다.
          $touch -c [파일명]
          [파일명] 파일이 없으면 생성되지 않으며 'ls : cannot access [파일명]: no such file or directory' 메시지가 출력
        • -d : 지정한 시간으로 접근 시간, 수정 시간이 수정되고, 변경시간은 현재 시간으로 수정된다.
          $touch -d date [파일명]
          $touch -d '년-월-일 시간' [파일명]
        • -m : 현 시간으로 파일의 수정, 변경 시간을 수정한다.
          $touch -m [파일명]
        • -r : 지정한 파일의 지정, 수정 시간을 선택한 파일의 지정, 수정 시간으로 변경하고 변경 시간은 현재 시간으로 수정된다.
          $touch -r [선택파일명] [지정파일명]
        • -t : 지정한 시간으로 접근 시간, 수정 시간을 수정하고 변경 시간은 현재 시간으로 수정된다.
          $touch -t 202202281036.30 [파일명]
          지정 시간은 YYYYMMDDhhmm.ss(년월일시간분.초) 형태로 입력한다.
      • Tip
        • 리눅스에는 세 종류의 타입스탬프가 있다.
          atime : 최종 접근 시간( access time )
          ctime : 최종 상태 변경 시간(change time)
          mtime : 최종 수정 시간(modify time)
          별다른 옵션이 없다면 atime, ctime, mtime 모두 변경된다.
        • stat [파일명] : 해당 파일의 타임 스탬프를 확인할 수 있다.
          $stat [파일명]
        • 여려파일 만들기
          $touch [파일명] [파일명] [파일명] ...
    • tee( 파일 생성과 내용추가)
      • 표준 입력(standard input)에서 읽어서 표준 출력(standard output)과 파일에 동시에 쓰는 명령어입니다.
        출력할 파일이 없을 경우 파일을 새로 만듭니다. ( 기존에 파일이 있다고 해도 옵션이 apped가 아니라면 새로 파일을 생성합니다.)
        $echo "hello wold" | tee [파일명] #echo로 출려과 tee로 파일 입력을 동시에 함
        $date | tee -a [파일명] #tee를 사용해서 명령어 내용을 표준 출력으로 파일로 동시에 함
        표준 출력에는 쓰지 않으려면 마지막에 '/dev/null' 디바이를 연결해 주면 표준 출력장치인 터미널에는 출력하지 않습니다.
        $echo "hello world" | tee -a [파일명] > /dev/null
        $date | tee -a [파일명] > /dev/null
      • 옵션
        • -a : 파일을 덮어쓰지 않고 파일 끝에 추가합니다.
          $[command] | tee -a [파일명]
        • -l : 인터럽트 신호를 무시합니다.
          $[command] | tee -l [파일명]
        • 여러파일 쓰기
          $[command] | tee [파일명] [파일명] [파일명] ...
      • tee 사용 이유
        shell에서 출력을 redirection할 경우 sudo를 사용해도 사용자로 전환 되므로 root권한으로 파일에 쓰거나 내용 추가가 필요한 경우 제대로 동작하지 않습니다. 
        tee는 shell script에서 root권한으로 특정 파일을 쓰거나 append 할때 주로 활용합니다. 다시 말해 다른 사용자가 소유한 파일에 쓸 수 있다.
        $echo "test' | sudo tee -a /etc/***/***.cnf
    • redirection('>' , '>>')(파일 생성과 내용추가)
      • >, >>은 데이타의 흐름방향을 나타냅니다. command 실행 후 출력 결과를 계속해서 파일에 로그 처럼 남기고 싶을 경우 사용합니다. 표준 출력에는 출력되지 않습니다. 표준 출력에 함께 출력하고 싶을 때는 'tee' 명령어를 사용합니다.
        redirection 명령어를 기준으로 왼편에는 실행하고 싶은 command를 오른편에는 다른 스트림, 파일 등 출력될 장치를 선택합니다. 출력할 형태가 파일이고 출력할 파일이 존재하지 않을 경우 새로 만듭니다.(기존에 파일이 있다고 해도 '>(overwrite)' 명령일 경우 파일을 새로 생성합니다.)
      • 사용예
        • '>(overwrite)'
          [command] > [파일명 or 스트림]
          $echo "hello wold" > [파일명]
          $date > [파일명]
          $list * > [파일명] 
        • '>>(append)'
          $echo "hello wold" >> [파일명]
      • 특정 스크립트 실행 결과 에러를 파일에 남기기
        $test.sh > [파일명] 2 > &1
      • 특정 스크립의 실행 결과와 에러를 분리해서 저장하기
        $test.sh > [실행결과 저장 파일명] 2 >> [에러 저장 파일명] 
      • 파일 디스크립터
        0 : 표준 입력( standard input )
        1 : 표준 출력( standard outpu )
        2 : 표준 에러( standard error )
        $test.sh 1 > [파일명] or test.sh > [파일명} #표준 출력을 파일로 저장
        $test.sh 2 > [파일명] #표준에러를 파일로 저장
        $test.sh 1 > [파일명] 2 > [파일명] #표준 출력과 표준 에러를 각자 다른 파일에 출력
        $test.sh 2 > &1 #표준 에러를 표준 출력으로 출력, redirction의 오른쪽을 표준 파일로 쓰고 싶을 때는 '&' 기호를 붙여 줘야 한다.

 

 

 

 

 

 

 

 

Posted by 생짜
|

※ 출처 : makersweb(https://makersweb.net/embedded/13896) 에서 가져온 글

※ QT 또는 Embedde 관련 검색을 하다 보면 makersseb 의 글들이 간간이 보인다. 나한테는 나름 유용한 사이트이다. ^^

 

비트베이크 (bitbake):

포키 빌드 시스템의 태스크 스케줄러이다. 메타데이터를 파싱하고 태스크로 만들어 관리한다.

 

Metadata:

이미지를 빌드 할 때 BitBake가 분석하는 파일들을 말한다. 일반적으로 메타 데이터에는 레시피(.bb와 .bbappend파일), 클래스(.bbclass파일), 그리고 환경설정(.conf파일)이 있다.

 

poky:

Pah-kee로 발음되는 "poky"라는 용어는 여러 가지 의미가 있다. 가장 일반적인 의미에서, poky는 OpenedHand가 처음 개발 한 오픈 소스 프로젝트이다. OpenedHand는 기존의 OpenEmbedded 빌드 시스템에서 벗어나서 임베디드 리눅스 용으로 상업적으로 지원 가능한 빌드 시스템을 만들었다. poky 프로젝트는 Yocto Project의 빌드 시스템의 기초가 되었다. 

마지막으로, "poky"는 Yocto Project를 poky 저장소와 함께 사용하여 이미지를 빌드할 때 생성되는 기본 DISTRO (즉, 배포판)을 나타낼 수 있다.

 

Classes:

로직 캡슐화 및 상속을 제공하는 파일로 일반적으로 사용되는 패턴을 한 번 정의한 다음 여러 레시피에서 쉽게 사용할 수 있다.

Classes 파일은 .bbclass 파일 이름 확장자로 끝난다.

 

Configuration File(xxx.conf):

다양한 .conf 파일의 설정 정보는 변수의 전역 정의를 제공한다. Build Directory의 conf/local.conf 설정 파일에는 모든 빌드에 영향을 주는 사용자 정의 변수가 들어 있다.

meta-poky/conf/distro/poky.conf 설정 파일은 이 정책으로 빌드 할 때만 사용되는 Yocto "distro"설정 변수를 정의한다.

설정 파일은 .conf 파일 이름 확장명으로 끝난다.

 

Recipe:

패키지를 빌드하기 위한 명령어 세트.

레시피는 소스 코드를 어디에서 얻을 수 있는지, 적용 할 패치, 소스 설정 방법, 컴파일 방법 등을 설명한다. 

레시피는 또한 library 또는 다른 레시피에 대한 의존성을 설명한다.

레시피은 실행 논리 단위, 빌드 할 소프트웨어, 빌드 할 이미지를 표현하고, .bb 파일 확장명을 사용한다.

 

Image:

이미지는 레시피 모음 및 관련 메타 데이터가 제공된 BitBake 빌드 프로세스의 결과물(자동생성데이터)이다.

이미지는 특정 하드웨어 또는 QEMU에서 실행되는 바이너리 output이며 특정 유스케이스에 사용된다.

 

Layer:

core, BSP 또는 애플리케이션 스택을 나타내는 레시피 모음.

 

oe-init-build-env:

OpenEmbedded 빌드 환경을 설정하는 스크립트파일이다.

'karma( 업 ) > YOCTO' 카테고리의 다른 글

빌드 시스템-Yocto  (0) 2022.02.23
YOCTO 준비하기 - wsl2 에 Docker 설치하다.  (1) 2021.12.21
YOCTO 준비하기-win10에 wsl2 설치하다.  (0) 2021.12.20
Posted by 생짜
|