'[ 충남인력개발원 ] (2019)/┗C'에 해당되는 글 5건

우분투(Ubuntu)에서 패키지를 관리하는 명령어가 몇가지 있습니다. 그 중 가장 기본이 되는 것이 apt-get입니다. 많은 옵션이 있는데, 자주 쓰는 몇가지를 정리해보겠습니다.apt-get update

패키지 목록을 갱신합니다.

apt-get upgrade

모든 패키지를 최신 버전으로 업그레이드합니다.

apt-get install abc

abc 패키지를 설치합니다.

apt-get remove abc

abc 패키지를 삭제합니다. 설정파일은 삭제하지 않습니다.

apt-get purge abc

abc 패키지를 삭제합니다. remove와 다르게 설정파일도 삭제합니다.

참고로 패키지 검색은 apt-cache로 합니다. abc를 포함한 패키지를 검색하려면 

apt-cache search abc

와 같이 하면 됩니다.

 

https://www.manualfactory.net/10175

블로그 이미지

Or71nH

,

C에서 변수는 값이 저장되는 메모리 영역이나 변수의 유효범위에 따라 구분되는데 auto, static, extern 이 세가지 키워드(keyword)를 이용하여 구분을 할 수 있다.

변수의 유효범위는 크게 지역변수(local variable)와 전역변수(global variable)로 나뉘며, 실제 프로그램 실행시에 변수가 저장되는 메모리상의 위치에따라 높은 주소값부터 거꾸로 사용하여 내려오는 스택(stack)과, 낮은 주소값부터 올라가면서 사용하는 정적데이터영역(.data, .bss)과 힙(heap)으로 구분된다1. 최적화 관점에서 살펴보면, 스택의 경우 해당 범위(scope)에서 자주 액세스 되며 범위가 끝나면 없어지는 임시변수들이 저장되는데, 스택포인터를 순차적으로 이동해가면서 할당되기 때문에 할당속도가 빠르며, 해당 변수들이 자주사용되어서 CPU 캐시의 힛트율이 높은 경우 접근 속도도 더 빨라질 가능성이 있다. 하지만 범위가 끝나면 없어지기때문에 계속적으로 값을 유지하는 것이 불가능하다. 이러한 문제를 해결하기위해서는 정적인 변수들은 정적 데이터 영역에 저장하여 계속 유지되며, 동적인 변수들은 힙에 변수를 할당하고 저장해야한다. 힙은 비순차적으로 메모리 할당/해제가 계속 일어나는 동적인 특성을 갖고있다. 때문에 스택처럼 메모리 할당을 순차적으로 하기가 힘들어서 정적인 방식에 비해 할당 속도가 느린 특성을 갖는다.

이제 각각의 키워드에 따라 해당 변수의 유효범위와 저장되는 영역이 어떻게 결정되는지를 케이스별로 살펴보도록 하자.

    1. auto (자동범위변수)
      • 일반적인 지역 변수 형태로 블럭 안에서만 유효하며 블럭의 실행이 끝나면 소멸
      • 스택에 메모리 할당
      • 일반적으로 C에서 auto 키워드는 생략되어있음. 즉 아무 표시하지 않은 변수는 auto와 같은 의미.
      • C++에서 auto 키워드를 사용할 경우 “자동 타입 추론”이라는 완전히 다른 의미를 가지게되므로 주의할것.
    2. static (정적변수)
      • 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시
        돌아왔을 때 이전 값을 다시 이용 가능(스택이 아닌 정적데이터 영역에 저장됨)
      • 초기화를 생략하면 0으로 자동 초기화
      • 정적 데이터영역에 할당
      • static은 사용되는 위치에 따라 의미가 달라지니 주의해서 사용할것.
        • 내부정적변수 : 함수 내부의 변수에 static이 사용된경우, 해당 변수는 함수 내부에서만 사용이 가능. 하지만, 프로그램이 실행되는 동안 계속 값이 유지됨
        • 외부정적변수 : 함수 외부의 전역범위의 변수에 static이 사용된경우, 해당 파일 내부에서는 전역변수처럼 사용되지만, 아닌 다른 소스파일에서는 참조할 수 없음
          (예: 보통 하나의 example.c 파일 내부에서만 사용하기위한 전역변수로 사용됨. 다른 파일이 example.h를 include하더라도 해당 static으로 선언된 전역변수는 보이지 않아 접근 불가)

       

    3. extern (외부변수)
  • 함수 밖의 전역 범위에 선언되며, 프로그램 전체에서 유효하고 다른 파일에서도 참조 가능
  • 초기화를 생략하면 0으로 자동 초기화
  • 정적 데이터영역에 할당
  • extern 변수는 편리하지만 남발하면 프로그램을 복잡하게 하고 나중에 유지보수가
    힘들기 때문에 사용을 최소화 하는 것이 바람직함
  • 외부변수 정의하는 방법은 아래 extern_example 예제를 참조하고 실제 이를 다른파일에서 사용하는 예시는 myfunction.c 를 보면된다.

 

블로그 이미지

Or71nH

,

https://blog.naver.com/tipsware/221275585536

 

C 언어 표준 함수를 위한 헤더 파일과 소스 파일은 어디에 있을까?

: C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 이 글은 Visual Studio 2017 버...

blog.naver.com

 

C언어 헤더파일 위치 /usr/include

 

1 개요[편집]

Header file location in CC언어 헤더 파일 위치

CentOS /usr/include
Ubuntu /usr/include

2 참고[편집]

Windows (Visual Studio) Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
블로그 이미지

Or71nH

,

[vi edit에서 줄번호 자동으로 보이기]

vim 초기화 파일에 명령어 추가

vi ~/.vimrc
set number (줄번호 숨길때 set nonumber, set nonu)

그 밖의 들여쓰기 기능들...

set autoindent

자동 들여쓰기가 되도록 설정

set cindent

C 언어 파일 수정시 들여쓰기가 되도록 설정

set tabstop=n (숫자)

탭 넓이를 n 만큼 띄움

set shiftwidth=n (숫자)

들여쓰기 간격을 n 만큼 띄움

syntax on (라즈베리파이 안될 수 있음)

구문강조 표시 설정

set showmatch

선택된 괄호와 짝을 이루는 괄호에 대해 강조

set ignorecase

대소문자 구별없이 검색하도록 설정

set number

줄번호를 표시

 

[자주 쓰는 명령어 요약]

1. 복사및붙여넣기

'V' (비주얼모드)에서 블럭지정 후 y(복사), x(잘라내기) 후 p로 붙여넣는다.

Ctrl+v 는 글자단위 선택

2. 해당 문자열 찾고 바꾸기


/찾으려는 문자열 입력한후 엔터

n을 부르면 문자열을 매칭해가면 찾을수 있음.

:s/aaa/bbb 엔터 현재줄의 aaa를 bbb로 교체

:%s/aaa/bbb 엔터 문서 전체에서 old를 new로 교체

3. 저장후 종료

:w 저장

:w! 저장후 편집종료

:q 저장하지 않고 종료

:q! 저장하지 않고 에디터 강제종료

:e 다른파일 편집

:e! 편집내용 저장하지 않고 최종 저장된 상태로 파일열기

4. 입력

i 문자앞에서부터 입력
cw 커서 위치의 한 단어 수정
c 커서 위치부터 줄의 끝까지 수정
a Cursor 다음에 text 추가
A 해당 라인의 끝에 text 추가

5. 되돌리기 되살리기

u 되돌리기

ctrl+r 되살리기


5. 복사
:1,3 co 5
:4,6 m 8


6. 줄 올리기
J


VI 에디터 명령어 표

 

1. 시작

vi file

vi를 시작하여 지정한 파일 편집

vi -R file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

view file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

2. 종료

:wq

데이터를 저장하고 종료

:q!

데이터를 저장하지 않고 종료

3. 시스템이 다운된 후에 되살리기

vi -r

되살릴 수 있는 모든 파일 이름 보여주기

vi -r file

vi를 시작하여 지정한 파일 되살리기

4. 디스플레이 제어하기

^L

현재 화면을 다시 디스플레이하기

:set number

내부 줄 번호 디스플레이

:set nonumber

배부 줄 번호 디스플레이 않기

5. 마지막으로 지운 것 복사하기

p

마지막으로 지워진 것을 커서의 뒤/아래에 삽입

P

마지막으로 지워진 것을 커서의 앞/위에 삽입

xp

두 문자를 바꿈

deep

두 단어를 바꿈

ddp

두 줄을 바꿈

6. 패턴 검색

/rexp

지정된 정규 표현식에 대해 앞으로 이동

/

이전의 패턴에 대해 앞으로 검색을 반복

?rexp

지정된 정규 표현식에 대해 뒤로 이동

?

이전의 패턴에 대해 뒤로 검색을 반복

n

/ ?명령에 대해 같은 방향으로 반복

N

/ ?명령에 대해 반대 방향으로 반복

7. 약어의 사용

:ab short long

short long에 대한 약어로 변경

:ab

현재 약어 목록을 표시

:una short

약어 short를 표시

8. 줄 길이의 조정

r <Return>

문자를 뉴라인으로 변경

J

줄의 결합

:set wm=n

오른쪽으로 n문자 위치에서 자동적으로 줄 나눔

9. 커서 이동

h<Left>

커서를 한 칸 왼쪽으로 이동

j<Down>

커서를 한 줄 아래로 이동

k<Up>

커서를 한 줄 위로 이동

l<Right>

커서를 한 칸 오른쪽으로 이동

<Backspace>

커서를 한 칸 왼쪽으로 이동

<Space>

커서를 한 칸 오른쪽으로 이동

-

커서를 이전 줄의 처음으로 이동

+

커서를 다음 줄의 처음으로 이동

<Return>

커서를 다음 줄의 처음으로 이동

0

커서를 현재 줄의 맨 앞으로 이동

$

커서를 현재 줄의 맨 끝으로 이동

^

커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동

w

커서를 다음 단어의 첫 글자로 이동

e

커서를 다음 단어의 끝 글자로 이동

b

커서를 이전 단어의 첫 글자로 이동

W

w와 같음(문장 부호 무시)

E

e와 같음(문장 부호 무시)

B

b와 같음(문장 부호 무시)

(

다음 문장의 처음으로 이동

)

이전 문장의 처음으로 이동

{

다음 문단의 처음으로 이동

}

이전 문단의 처음으로 이동

H

커서를 화면 맨 위로 이동

M

커서를 중간으로 이동

L

커서를 맨 아래로 이동

10. 편집 버퍼를 통한 이동

^F

한 화면 아래로 이동

^B

한 화면 위로 이동

n^F

n화면 아래로 이동

n^B

n화면 위로 이동

^D

반 화면 아래로 이동

^U

반 화면 위로 이동

n^D

n줄만큼 아래로 이동

n^U

n줄만큼 위로 이동

11. 셸 명령 실행

:!command

vi를 중단하고 지정한 셸 명령을 실행

:!!

vi를 중단하고 이전의 셸 명령을 실행

:sh

vi를 중단하고 셸을 실행

:!csh

vi를 중단하고 새로운 C-셸을 실행

12. 패턴에 의한 치환

:s/pattern/replace/

현재 줄의 치환

:lines/pattern/replace/

지정한 줄의 치환

:line,lines/pattern/replace/

지정한 범위의 치환

:%s/pattern/replace/

모든 줄의 치환

13. 데이터 읽기

:liner file

file의 내용을 지정한 줄 다음에 삽입

:r file

file의 내용을 현재의 줄 다음에 삽입

:liner !command

command의 결과를 지정한 줄 다음에 삽입

:r !command

command의 결과를 현재의 줄 다음에 삽입

:r !look pattern

지정한 pattern으로 시작된 단어 삽입

14. 정규 표현식을 사용하기 위한 특수 기호

.

뉴라인을 제외한 모든 단일 문자와 대응

*

영 또는 그 이상의 선행 문자와 대응

^

줄의 시작과 대응

$

줄의 끝과 대응

\<

단어의 시작과 대응

\>

단어의 끝과 대응

[ ]

묶여진 문자중의 하나와 대응

[^ ]

묶여진 문자를 제외한 아무것하고나 대응

\

이어지는 기호를 문자 그대로 해석

15. 줄 번호

nG

줄번호 n으로 건너뛰기

1G

편집 버퍼의 첫 줄로 건너뛰기

G

편집 버퍼의 마지막 줄로 건너뛰기

:map g lG

g lG와 같도록 매크로 정의

16. 삽입

i

입력 모드로 전환, 커서 위치 앞에서 삽입

a

입력 모드로 전환, 커서 위치 뒤에서 삽입

I

입력 모드로 전환, 현재 줄의 앞에 삽입

A

입력 모드로 전환, 현재 줄의 끝에 삽입

o

입력 모드로 전환, 현재 줄의 아래에 전개

O

입력 모드로 전환, 현재 줄의 위에 전개

17. 편집하고 있는 파일을 바꾸기

:e file

지정한 파일의 편집

:e! file

지정한 파일의 편집, 자동 점검의 생략

18. 내용 고치기

r

단지 한 글자만 변경(입력 모드로 바뀌지 않음)

R

입력하는 대로 겹쳐 써서 변경

s

삽입에 의해 한 단어의 변경

C

커서의 위치로부터 줄 끝까지 삽입에 의한 변경

cc

전체 줄을 삽입에 의한 변경

S

전체 줄을 삽입에 의한 변경

cmove

커서부터 move까지 삽입에 의해 변경

~

,소문자 바꾸기

19. 고치기의 취소 또는 반복

u

편집 버퍼를 수정했던 마지막 명령을 취소

U

현재 줄을 저장

.

편집 버퍼를 수정했던 마지막 명령 반복

20. 문자 삭제

x

커서가 있는 문자 삭제

X

커서의 왼쪽 문자 삭제

D

커서부터 줄의 끝까지 삭제

dd

현재 줄의 전체 삭제

dmove

커서부터 move까지 삭제

dG

커서부터 편집 버퍼의 끝까지 삭제

d1G

커서부터 편집 버퍼의 맨 앞까지 삭제

:lined

지정한 줄의 삭제

:line, lined

지정한 범위의 삭제

21. 여러 줄의 복사와 이동

:linecotarget

지정한 줄을 복사하여 target 줄 밑에 삽입

:line, linecotarget

지정한 범위를 복사하여 target 줄 밑에 삽입

:linemtarget

지정한 줄로 이동하여 target 줄 밑에 삽입

:line, linemtarget

지정한 범위로 이동하여target 줄 밑에 삽입

22. 데이터를 처리하기 위한 셸 명령의 사용

n!!command

n번 줄에서 command의 실행

!move command

커서부터 move까지 command 실행

!move fmt

커서부터 move까지 줄들을 형식 맞추기

23. 데이터 저장하기

:w

원래의 파일로 데이터를 저장

:w file

지정한 파일로 데이터를 저장

:w>> file

지정한 파일에 데이터를 추가

 

 

블로그 이미지

Or71nH

,

오늘 교육 이해안가는거 공부할거

 

링크드 리스트 만들기

 

 

 

mv 의 작동 방법

어떻것들이 되나

./a.out??? 이거뭐임

 

미션

1. 검색하기

아이디 입력 받아서 찾아내기

 

 

2. 수정하기 입력받고 수정하기

검색후 새로운 값으로 수정하기

 

3. 끼워넣기 쎌 로드 추가하기

 

4. 정렬하기

나이 배틀포인트

 

링크드 리스트 정보

 

https://luckyyowu.tistory.com/324

블로그 이미지

Or71nH

,