카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/13

Pointer reference


1. c의 포인터
  1. -참조 연산자 (&)
  • 메모리의 변수 주소

  1. -Pinter
  • 포인터는 C 프로그램에서 메모리에 접근 하고 주소를 조작 하는 데 사용 된다.
  • 포인터 변수 또는 단순히 포인터는 데이터가 아닌 메모리 주소를 보유 하는 변수의 특별 한 자료형이다

주소 값을 보유 하는 변수를 포인터 변수 또는 단순히 포인터 라고 한다.
32bit 주소 맵의 운영체제 (2^32 = 4G Memory)

int main(void){
int a;
int *b;
return 0;
}

a 변수 메모리 주소 확인 과정
&a에 라는 메모리 상의 주소 값이 리턴 값으로 온다.

메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x1000
메모리 공간 할당
a;
변수 선언
0X1260
메모리 공간 할당 *
b=110;
주소 값 0x1500 선언

실재 값 존재
110;
메모리 공간 할당
메모리 자료형 int(32bit)
0x1500

int main(void){
int *c;
char *d;
}
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x2000
메모리 공간 할당 *
c;
주소 값 0x2000 선언
0X3000
메모리 공간 할당 *
d;
주소 값 0x3000 선언


실재 값 존재
int
메모리 공간 할당
메모리 자료형 int(32bit)
0x2000 위치

실재 값 존재
char
메모리 공간 할당
메모리 자료형 int(32bit)
0x3000 위치


#include <stdio.h>
int main(void){
int value=10;
printf("Valueable: %d, Memory Address: %d\n", value, &value);
}
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x4000
메모리 공간 할당
value;
변수 선언
%p &value

%d value



#include <stdio.h>
int main(void){
int* point_value;
int num=100;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
변수 선언
0x5200
메모리 공간 할당 100
num
변수 선언


printf("[point_value] memory_address: %ld, Content: %d\n", point_value, 
*point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당
value;
변수 호출
%d *point_value

%d point_value
결과



printf("[num] memory_address: %p, Value: %d\n\n", &num, num);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
value;
변수 호출
%p &num

%d num
결과


point_value=&num;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200<-&num
0x5200=100;
메모리 공간 할당 *
point_value;
0x5000
변수 선언



printf("[point_value] memory_address: %ld, Content: %d\n\n", point_value, *point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당 *
point_value
변수 호출
%ld *point_value 20

&num = 0x5200
결과



num=90;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당 90
num
변수 선언


printf("[point_value] memory_address: %ld, Content: %d\n\n", point_value, *point_value);
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
point_value
변수 호출
%ld *point_value 11

num = 0x5200
결과


*point_value=30;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200=30
메모리 공간 할당 *
point_value=30
변수 선언


printf("[num] memory_address: %ld, Value: %d\n", &num, num);
return 0;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5200
메모리 공간 할당
point_value
변수 호출
%ld &num

num = 30
결과
}

gcc 옵션 및 Makefile

1. GCC 옵션 (또는 플래그)

    a. linking(연결) 하지 않고 컴파일: -c
    •  gcc는  linking(연결)하지 않고 소스 파일의 컴파일과 어셈블리를 수행.

    b. 출력 파일 이름 지정:-o <filename>
    •   outpub 결과 파일을 디폴트 값(a.out) 대신 지정 파일이름.

    c. 디버그 정보 포함: -g
    •  생성 된 개체 코드에 디버깅 정보를 포함.
    •  이 정보는 나중에 gdb에서 사용할 수 있다.

    d. 모든 경고 표시: -Wall
    •  잘못 된 코드와 관련 된 대부분의 경고를 표시.

    e. 헤더 파일의 경로를 지정: -I<path>
    •  gcc 컴파일러에게  미리 정의함 include 파일(.h)을 찾을 위치를 알려준다.

    f. 라이브러리 지정: -l<library name=>
    • 특정 라이브러리를 포함 하도록 gcc에 알려준다.

    g. 경고를 오류로 처리: -werror


-예
  gcc hello_world
   a.out

  gcc -c hello_world
   오브젝트 파일 생성

  gcc -o hello_world hello_world
   hello_world 실행 파일 생성

   gcc -g -o hello_world hello_world
    hello_world 실행 파일 디버킹 정보 생성 파일

   gcc hello_world hello_world -i. /include
    헤더파일 추가 컴파일

   gcc hello_world hello_world -lmath
    수학관련 라이브러리 추가 컴파일

   gcc hello_world hello_world -Llib
    라이브러리 추가 컴파일

2. 메이크파일 규칙
2.1 간단한 예
hello: main.o scrren.o hello.o
gcc main.o scrren.o hello.o -o hello

clean:
rm -rf *.o hello

main.o: main.c
gcc -c main.c

scrren.o: scrren.c
gcc -c scrren.c

hello.o: hello.c
gcc -c hello.c


2.2 간단한 예
CC=gcc
CFLAGS=-g -Wall
OBJ:=main.o scrren.o hello.o
EXE=hello

all: $(EXE)

$(EXE): $(OBJ)
$(CC) $(OBJ) -o $(EXE)

hello.o: hello.h hello.c
$(CC) $(CFLAGS) -c hello.c

3. 매크로
 HOME = /home/username
 PROJ = $(HOME)/project_name
 CINC = $(PROJ)/include
 LIB = $(PROJ)/lib
 INCL = I$(PROJ) -I$(CINC) -L$(LIB)

4. 규칙
-예
%.o : %.c
$(CC) $(FLAGS) -c $(SRC)
 빌드 프로세스를 일반화 하는 방법.
 일종의 와일드 카드 표기방식.
 "%"는 와일드 카드를 나타내는 데 사용 됨.
 모든 ".o" 파일에는 동일한 이름의 모든 ".%c" 파일에 대 한 종속성이 있다.

5. Makefiel 예제
 -예
CC = gcc
DIR = /home/username/lib
CFLAGS = -g -I$(DIR) -I. -c
LFLAGS = -g
std: test_analysis.o simuation.o peri.o misc.o opt.o stb.o vect.o
$(CC) $(LFLAGS) -o opt test_analysis.o simuation.o peri.o misc.o opt.o stb.o vect.o

test_analysis.o: analysis.c test_analysys_v1.h $(DIR)/misc.h $(DIR)/opt.h
$(DIR)/vect.h
$(CC) $(CFLAGS) analysis.c
simuation.o: $(DIR)/simulation.c $(DIR)/sim.h
$(CC) $(CFLAGS) $(DIR)/simulation.c

peri.o: $(DIR)/peri.c $(DIR)/peri.h $(DIR)/misc.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/peri.c
misc.o: $(DIR)/misc.c $(DIR)/misc.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/opt.h
stb.o: stb.c $(DIR)/misc.h $(DIR)/opt.h stb.h
$(CC) $(CFLAGS) stb.c
vect.o: $(DIR)/vect.c $(DIR)/vect.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/vect.c

컴퓨터 현재 까지의 역사.

시스템 프로그램의 역할 및 개발자 영역 소프트웨어/하드웨어

1. 부품 개발자(기초 과학이 없으므로 부품 조합 개발)
1.1 프로그램 영역
    • assembly, c, c + +, 자바, PHP, Python
    • 프로그래밍 언어(c + +, 자바, PHP, Python 현업에 맞게 상용됨)
    • 시스템 프로그래밍(asm, c)

1.2 운영체제 이식(포팅) 영역
    • 데이터 구조(컴퓨터 지원하는 언어로 무엇을 표현할 것인가.)
    • 운영 체제(커널 포팅, 디바이스 드라이버 포팅)

1.3 디지털 하드웨어 영역
    • 디지털 하드웨어
    • 마이크로프로세서
    • 컴퓨터 아키텍처

1.4 RF 하드웨어 영역
    • SMPS(파워 서플라이)
    • 무선통신.

1.5 알고리즘
물리엔진, 3D 엔진, 2D엔진, 등

2. 컴퓨터 시스템
2.1 응용 프로그램
    • 킬러 프로그램: 크롬, 파워 포인트, 워드
    • 서비스 응용 프로그램: 카카오톡, 게임, 네비게이션

3 운영 체제
    • 윈도우, 맥 OS X, 리눅스, 안드로이드, 실시간 운영체제

4 컴퓨터 하드웨어
    • X86: CPU, 램, VGA, HDD 등
    • ARM: ARM, 램, VGA, NOR Flash, NAND Flash

5. 임베디드 시스템
    • 사용자 응용 프로그램

5.1 임베디드 운영 체제
    • 리눅스, ucos, vxworks,RTOS

5.2 임베디드 하드웨어
    • 프로세서, I/O, 메모리 등

6 사용자 공간
6.1 응용 프로그램
    • 사용자 응용 프로그램
    • 라이브러리

6.2 운영 체제
    • 라이브러리
    • 시스템 호출 인터페이스
    • 커널
    a. 파일 시스템
    b. 프로세스 간 통신
    c. 프로세스 관리
    d. 아키텍처 의존성 커널

6.3 컴퓨터 하드웨어
    • 입력: 키보드, 마우스, 터치, 음성, 생체(지문, 홍체, DNA RNA)
     
    • 계산: CPU
    • 저장소: HDD, RAM
     
    • 출력: 모니터, 프린터, 스피커, 빔 프로젝터

7. 마이크로프로세서의 역사
    • 마이크로프로세서는 1971에서 인텔에 처음 도입.
    • 인텔 8085에는 내부 메모리가 있다.
    • 4 비트 마이크로프로세서 (인텔 4004)-> 8 비트 마이크로프로세서 (인텔 8080)-> 32 비트 마이크로프로세서 (인텔 80386 이상)-> 64 비트 마이크로프로세서 (인텔 펜티엄)
    • 메모리 공간 4KB (인텔 4004)-> 64kb인텔 8085)-> 1MB(인텔 8086) -> 16MB(인텔 80286)-> 4GB(인텔 80386) -> 64gb(인텔 펜티엄).
    • 캐시 메모리는 인텔 80486 도입.
    • 멀티 스레딩이 가능한 듀얼 코어 프로세서
    • 서버를 위한 멀티 코어 또는 멀티 프로세서

8. 주요 운영 체제
    • 윈도우
    • Mas 운영 체제
    • 리눅스
    • 유닉스
    • 임베디드 OS의 (안드로이드, 아이폰 os)
    • 실시간 OS의

9. 운영 체제의 역사
9.1 운영 체제의 간략 한 역사
-메인프레임: 1950 년대부터
    • 초기 컴퓨터에 OS 없음.
    • 모든 컴퓨터에는 자체 os (독점 os)가 개발 판매.
    • 단일 스트림 일괄 처리
    • VMX
    • 유닉스 초기 (유닉스는 AT&T 벨 연구소에서 발명)
    • 많은 사용자가 공유 가능 한 운영체제.(멀티 사용자 OS 필요)

-초기 개인용 컴퓨터: 1970 년대 후반
    • pc: 알타리, TRS 80, 코모도 64, 애플 2
    • 각 컴퓨터에는 전용 os가 있거나 os가 없는 시대.
    • CP/M(마이크로 컴퓨터 제어 프로그램)

-PC 및 mac: 1980 년대 초반
    • 마이크로프로세서 덕분에 개인용 컴퓨터가 인기 상승.
    • IBM이 OS에 대해 MS 요청 함.
    • MS는 시애틀 컴퓨터 제품에서 86-DOS를 샀다
    • MS는 DOS (디스크 운영 체제)를 개발
    • DOS는 커맨드 라인 OS 이며 CP/M과 역방향 호환이 가능 합니다.

-gui (그래픽 사용자 인터페이스): 1980 년대
    • Xerox 파크 리서치 센터 최초 개발
    • 제록스 8010, 사과 리사, 애플 매킨토시
    • 마이크로 소프트 윈도우 시리즈, X 창 등

-1990 년대 이후
    • 마이크로프로세서의 강력한 활용
    • 멀티 프로세싱 및 멀티-쓰레드

-운영 체제의 종류
    • 간단한 배치 시스템
    • 멀티 프로그래밍 배치 시스템 (시간 공유 시스템)
    • 멀티 프로세서 시스템
    • 분산 운영 체제
    • 실시간 운영 체제

10. 리눅스
-유닉스 계열 운영 체제
    • 리눅스는 유닉스의 무료 소스 코드 버전을 기반
    • 소스는 인텔 CPU 기계 코드로 컴파일 되어 배포 됨.
    • PC 하드웨어에 유닉스 기반 코드를 실행할 수 있다
    • 내부 SW 아키텍처는 1960 년경 (단일 사용자 컴퓨터를 위한 다중 사용자 OS)
    • 다양 한 하드웨어 플랫폼에서 실행

-배포
    • 데비안 (라즈베리, 우분투 등): 비 상업적
    • 페도라 (레드햇 등): 상업용
    • 다양 한 다른 배포판 (오픈수세, 안드로이드 등)

11. C 프로그램 개발 환경
-c + + (또는 c) 프로그램의 단계
    • 코드 편집기
    • 전처리
    • 컴파일
    • 링크
    • 로드
    • 실행

    a. 편집기
    •  디스크: 프로그램 코드 편집기를 통해 디스크에 저장 한다.

    b. 전처리기
    •  디스크: Preporcessor 프로그램에서 코드를 처리 한다.

    c. 컴파일러
    •  디스크: 컴파일러는 객체 코드를 만들고 디스크에 저장 한다.

    d. 링커
    •  디스크: 링커는 객체 코드를 라이브러리와 연결 한다.

    e. 로더
    •  디스크 > 프라임 메모리: 로더는 프로그램을 메모리에 넣는다.

    f. Cpu
    • 기본 메모리: CPU는 각 명령을 가져와 실행 하며, progrma 실행 될 때 새 데이터 값을 저장 한다.

config gvim 명령어 간단 정리

구문론, 문장론.
:
syntax on
syntax off

syn on
syn off

탭설정.
:
set shiftwidth=2 softtabstop=2 expandtab

자동탭
:
set autoindent 
set noautoindent

set paste

명령어 재 설정.
:
command! Wq :wq
command! W :w

단어 및 문장 자동완성
함수 첮 글자 control + N

파일 탭 메뉴 확인
set wildmenu

사용한 명령어 히스토리 검색
:
ctntrol + x -> x 모드 진입
ctntrol + f

디렉단위 검색
find
ls 작업 했던 파일 목록 확인
:b 인덱스 입력

find 디렉토리 경로 지정 이동

키보드 키 맵밍
nnoremap <C-n> :bnext<CR>
nnoremap <C-p> :bprevious<CR>

파일생성
e 파일명

파일 다른이름 으로 저장
w 파일명

화면분할
split 불어들일 파일명.
vsplit 불어들일 파일명.

히스토리 찾기
:
ctntrol + x -> x 모드 진입
ctntrol + f

주로 사용하는 방법
gvim 작업 할 파일 열기

화면 분할 생성
sp 가로
vs 세로

작업할 파일 검색 으로 찾기
find

config trans Specify debug mode and engine

엔진 리스트 확인.
trans -S

엔진 설정
trans -e

디버그 테스트
trans Test -d
trans Test --debug


config setting and network-manager

gnome 3 설정 인터페이스 패키지
- gnome-control-center

네트워 관리 패키지
network-manager network-manager-gnome

config Ubuntu 18.04 X gnome Mac GUI configation

0. 디렉토리 위치
윈도우 관리자.
- lightdm 관리자
- gdm3 관리자
- wayland 관리자. 

현재 gdm3 관리자로 진행.

사용자.
테마 파일
/home/username/.themes

아이콘  파일
/home/username/.icons

Dock 위치
/home/username/.local/share/gnome-shell/extensions/

전체 시스템
테마 파일: /usr/share/themes
아이콘 파일:/usr/share/icons
잠금모드 파일: /usr/share/gnome-shell/theme



1. 그놈 조정 도구 다운로드
검색(윈도우 키): 우분투 소프트웨어
tweaks
설치

2. 사용자 테마 확장 설치
검색(윈도우 키): 우분투 소프트웨어
userthemes
설치

3. 다운로드 테마 (맥 OS)
https://www.gnome-look.org
- GTK3 Themes

4. 다운로드 아이콘 (macOS)
https://www.gnome-look.org
- Icon Themes

5. .themes 디렉토리에 복사
tar xfz Sierra-light-solid-alt.tar.xz
mkdir /home/username/.themes
cd /home/username/.themes
cp /home/username/Download/Sierra-light-solid

6. .icons 디렉토리에 복사
tar xfz Macos-sierra-CT-0.8.8.tar.gz
mkdir /home/username/.icons/
cd /home/username/.icons/Macos-sierra-CT
cp /home/username/Download/

7. 테마 변경
검색(윈도우 키): tweakl
모양새 선택
- 프로그램 : Sierra-light-solid
적용

8. 아이콘 변경
검색(윈도우 키): tweakl
모양새 선택
- 아이콘 : Macos-sierra-CT
적용

9. Dash를 다운로드하여 Dock 확장 프로그램 연결을 위해 설치
검색(윈도우 키): 우분투 소프트웨어
Dash to Dock
설치

10. 도크 사용자 정의
검색(윈도우 키): setting
Dock(독) : 위치 지정(하단)

11. 셸 테마 다운로드 (macOS high Sierra)
https://www.gnome-look.org
Gnome Shell Themes
macOS high Sierra 또는 DARK.for.Dash.to.DOCK.tar.xz

12. blyr 확장 설치
검색(윈도우 키): 우분투 소프트웨어
blyr
설치

13. 쉘 테마 .themes 디렉토리 복사
cp -a /home/username/Download/DARK.for.Dash.to.DOCK/3.30Majove_NIGHT /home/username/.themes

14. 쉘 테마 변경
검색(윈도우 키): tweakl
모양새 선택
- 쉘 : Sierra-light-solid
적용

15. netspeed 확장 설치
검색(윈도우 키): 우분투 소프트웨어
netspeed
설치

16. 잠금 화면 테마 설치 GDM 테마 (macOS high sierra)
cd /home/username/Download/High_Ubunterra_2.3(noPass)
sh install.sh

/usr/share/gnome-shell/theme/ubuntu.css
ls -al /usr/share/gnome-shell/theme/ubuntu.css

17. /usr/share/gnome-shell/theme 확인
ls -al ubuntu.css /usr/share/gnome-shell/theme/ubuntu.css

확인
ls -al ~ /.local/share/nautilus/scripts/

18. grub GUI 설정
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

19. 파이워폭스 플래쉬 플러그인 설치
sudo apt-get install flashplugin-installer

20. GUI ufw
sudo apt-get install gufw

21. sublime-text 에디터
좋은 데이터라 해서 설치 해 본다.
https://linuxconfig.org/how-to-install-sublime-text-on-ubuntu-18-04-bionic-beaver-linux

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
sudo apt-add-repository "deb https://download.sublimetext.com/ apt/stable/"
sudo apt install sublime-text

실행
subl

22. 노트북 전원관리

sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw
sudo apt-get install tp-smapi-dkms-acpi-call-dkms <- 노트북 팅크패드.

재부팅
reboot

실행
sudo tlp start

상태 확인
sudo service tlp status

23. 영어 한글 버전 변경
한글에서 영어
export LANG=C
xdg-user-dirs-gtk-update
/home/username/.config/user-dirs.locale -> 사용자 언어, 다시 문지 않기 체크시 사라짐.

영어에서 한글
cd /home/username/.config/
touch user-dirs.locale
xdg-user-dirs-gtk-update

24. 부팅 순서 변경
grub customizer 실행
일반 설정 -> 기본으로 부팅할 운영체제 선택

25. 방화벽
상태확인
sudo ufw status verbose

활성화 확인
sudo ufw enable

비할성화 시키기
sudo ufw disable

28. firefox 확장셀 적용
https://addons.mozilla.org/en-US/firefox/addon/gnome-shell-integration/
+Add to Firefox 설치

29. Gno-Menu Extension 설치
https://extensions.gnome.org/extension/608/gnomenu/
현재 셜 버전은 동작 하지 않음
그래서 3.30 -> 27 버전으로 다운로드

현재 셀 버전 확인
ctrl + art + t
shell> nome-shell --version
GNOME Shell 3.28.3

신규 적용
mkdir ~/.local/share/gnome-shell/extension/gnomenu@panacier.gmail.com
reboot
gnome-tweaks  -> 확장 프로그램 활성화.