카테고리

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/14

.gvimrc 설정

.vimrc 읽은 후 .gvimrc 설정 부분 재 정의

set background=dark
colorscheme hybrid
"
"set background=light
"colorscheme hybrid

"set background=dark
"colorscheme solarized

"set background=light
"colorscheme solarized

" Windows
"set guifont=Font\ Family:h12
"set guifontwide=Font\ Family:h12

"Linux Version
set guifont=D2Coding\ 16
set guifontwide=D2Coding\ 16

화면분할 CLI 설정

우분투 18.04 에서 gnome-shell이 4분할 기능이 현재 나오지 않음.
스크립트 작업에 필용한 응용프로그램 4분할 위치 지정 방법 시나리오.

윈도우 사이즈 설정
sudo apt-get install wmctrl
sudo apt-get install xdotool

wmctrl -r '제목 창' -t '작업 공간 번호 지정'

#epiphany 실행 뒤,
#3초 대기
# 해당 프로그램의 PID에 해당하는 창 ID를 획득.
# 해당 창 ID 정보로 지정된 작업공간 0번으로 옮긴다.
epiphany & sleep 3; t=$(wmctrl -lp | grep -F " $! " | awk '{ print $1 }'); wmctrl -i -r $t -t 0

스크립트 참고 (http://hungrylobster.tistory.com/136).
sudo vi ~/bin/setwindow.py
#!/usr/bin/env python3
import subprocess
import time
import sys

app = sys.argv[1]

get = lambda x: subprocess.check_output(["/bin/bash", "-c", x]).decode("utf-8")
ws1 = get("wmctrl -lp"); t = 0
subprocess.Popen(["/bin/bash", "-c", app])

while t < 30:   
    ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
    procs = [[(p, w[0]) for p in get("ps -e ww").splitlines() \
              if app in p and w[2] in p] for w in ws2]
    if len(procs) > 0:
        w_id = procs[0][0][1]
        cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_horz"
        cmd2 = "wmctrl -ir "+w_id+" -b remove,maximized_vert"
        cmd3 = "xdotool windowsize --sync "+procs[0][0][1]+" "+sys.argv[4]+"% "+sys.argv[5]+"%"
        cmd4 = "xdotool windowmove "+procs[0][0][1]+" "+sys.argv[2]+" "+sys.argv[3]
        for cmd in [cmd1, cmd2, cmd3, cmd4]: 
            subprocess.call(["/bin/bash", "-c", cmd])
        break
    time.sleep(0.5)
    t = t+1

실행 권한
chmod +x ~/bin/setwindow.py

setwindow.py 0 0 50 100 gedit /path/to/file.txt
setwindow <horizontal-position> <vertical-position> <horizontal-size (%)> <vertical-size (%)> <application> <file_to_open>
setwindow <수평> <수직> <수평-크기 (%)> <수직-크기 (%)> <응용프로그램> <파일명>

크기가 다른 듀얼 모니터 사용 예


wmctrl -lG | grep firefox
wmctrl -lG | grep Mozilla\ Firefox
0x04200011  0 14   94   1280 1386 linuxlee-11T750-GT58K Mozilla Firefox

0x04200011: 프로세스 메모리 로딩 위치
0: 작업 공간 번호
14 94: x, y 위치
1280 1386: 윈도우 가로, 세로 화면 크기

위치 지정
setwindow.py 사용프로그램 <x위치> <y위치> <가로크기> <세로크기>

setwindow.py firefox 1221 24 25 100
setwindow.py firefox 2332 24 25 100

setwindow.py firefox 1221 24 50 100
setwindow.py firefox 2332 24 0 100

swap 함수 구현

교환 함수 swap 구현

#include <stdio.h>

void swap(int *a, int *b);

int main(void){
int number1=5, number2=10;
printf("numberber1 = %d\n", number1);
printf("numberber2 = %d\n", number2);
swap(&number1, &number2);
printf("numberer1 = %d\n", number1);
printf("numberber2 = %d\n\n", number2);
return 0;
}

void swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}

scanf 입력 6개 총합

6개의 키보드 정수형을 입력
입력 받은 숫의 총합 계산.

#include <stdio.h>

int main(void){
int i, value[6], sum=0;
printf("Enter 4 numbers:\n");
for(i=0; i<6; ++i) {
scanf("%d", (value+i));
sum += *(value+i);
}
printf("Sum=%d", sum);
return 0;
}

배열 포인터 메모리 주소 자료형 변화


#include <stdio.h>

int main(void){
int c_array[4]={'o', 't', 't', 'f'};
//c_array[4] 8비트 4개 자료형 4Byte


0x2003
f


0x2002
t


0x2001
t
대표번지 0x2000 o

int d[4]={1,2,3,4};
//d[4] array 32bit 4개 자료형 32Byte


0x3012
4


0x3008
3


0x3004
2
대표번지 0x3000 1

int i;

for(i=0; i<4; ++i){
printf("memory_address of c_array[%d]=%p\n\n", i, &c_array[i]);
c_array[%d]
i
o
%p
&c_array[i]
0x2000

printf("&c_array[%d]=%p, (c_array+%d)=%p\n\n", i, &c_array[i], i, (c_array+i));
&c_array[%d]
i
t
%p
&c_array[i]
0x2001
c_array+%d
i
t
%p
c_array+i
0x2002

printf("c_array[%d]=%c_array, (c_array+%d)=%c_array\n\n", i, c_array[i],i, *(c_array+i));
&c_array[%d]
i
f
%p
&c_array[i]
0x2000
c_array+%d
i
t
%p
c_array+i
0x2001
}

for(i=0; i<4;++i){
printf("memory_address of d[%d]=%p\n\n", i, &d[i]);
memory_address of d[%d]
i
1
%p
&d[i]
0x3000

printf("&d[%d]=%p, (d+%d)=%p\n\n",i, &d[i], i, (d+i));
&d[%d]
i
2
%p
&d[i]
0x3004
(d+%d)
i
3
%p
(d+i)
0x3008

printf("d[%d]=%d, *(d+%d)=%d\n\n", i,d[i], i, *(d+1));
d[%d]
i
3
%d
d[i]
0x3008
*(d+%d)
i
4
%d
*(d+1)
0x3012
}
return 0;
}

초급자 메모리 포인터 선언 실수 원인


#include <stdio.h>

int main(void){
int *pointer_value, value;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
변수 선언
0x5200
메모리 공간 할당
value
변수 선언

*pointer_value=value;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
주소(R) 변수 선언
0x5000
INT 주소 자료 형식
주소 값
주소(R) 값 모드 대기
0x5200
메모리 공간 할당
value
(RW)변수 선언
0x5200
INT 주소 자료 형식
변수 값
정수 값(W) 모드 실행
메모리 번지
자료형 NO
형식 다름
실패

*pointer_value=&value;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
주소(R) 변수 선언
0x5000
INT 주소 자료 형식
주소 값
주소 값(R) 모드 대기
0x5200
메모리 공간 할당 &
value
주소(RW) 참고 변수 선언
0x5200
INT 주소 자료 형식
추소 참고 변수 값
참고 (W) 모드 실행
메모리 번지
자료형 NO
형식 다름
실패

*pointer_value=value;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당 *
point_value;
주소(R) 변수 선언
0x5000
INT 주소 자료 형식
주소 값
주소 값(R) 모드 대기
0x5200
메모리 공간 할당
value
(RW) 변수 선언
0x5200
INT 주소 자료 형식
주소 값
참고 (RW) 모드 실행
메모리 번지
자료형 KO
형식 다름
성공

pointer_value=&value;
메모리 번지
메모리 자료형 int(32bit)
변수 이름
설명
0x5000
메모리 공간 할당
point_value;
주소(RW) 변수 선언
0x5000
INT 주소 자료 형식
주소 값
주소 값(RW) 모드 대기
0x5200
메모리 공간 할당 &
value
(RW) 변수 선언
0x5200
INT 주소 자료 형식
주소 값
참고 (RW) 모드 실행
메모리 번지
자료형 KO
형식 다름
성공
}