본문 바로가기
2022-2/시스템 프로그래밍

3장 - C프로그래밍 환경

by 철없는민물장어 2022. 10. 7.
728x90
반응형

문서 편집: vi편집기

 

vi의 동작모드

명령모드: (ESC,ENTER) 커서이동,페이지이동,글자삭제,줄 삭제 등

입력모드: i,I,a,A,o,O

마지막행 모드: (/,?,:) 검색, 저장, 바꾸기,줄 이동 등

 

저장 및 종료명령

:w [파일명] : 저장, 파일명을 지정할 시 지정한 파일명으로 저장

:q! 저장하지 않고 종료

:wq! 저장하고 종료

ZZ 저장하고 종료

 

내용 삭제 및 취소

x 문자삭제

D 커서 위치부터 줄 끝까지 삭제

u 방금 수행한 명령 취소

dd 현재 줄 잘라내기

 

복사, 잘라내기, 붙이기

yy 현재 행 복사

p 붙여넣기

 

범위지정 방법

% 모든 줄

1,$ 첫 줄에서 마지막 줄까지

.,$ 현재 줄에서 마지막 줄까지

10,20 

뭐 요런식..

 

검색 기능

/문자열 : 현재 위치부터 파일의 아래 방향으로 문자열 탐색

?문자열 : 현재 위치부터 파일의 위 방향으로 문자열 탐색

n : 다음 문자열 탐색(검색한 이후에 이동하는거)

 

바꾸기 기능

:s/문자열1/문자열2 : 커서가 위치한 줄에서만 문자열1을 2로 바꿈

:<범위>s/문자열1/문자열2/ : 범위 안의 모든 줄에 대해서 각 줄의 첫번째 문자열1을 2로 바꿈

:<범위>s/문자열1/문자열2/g : 범위 안의 모든 문자열1을 2로 바꿈

:<범위>s/문자열1/문자열2/gc : 범위 안의 모든 문자열1을 2로 바꿀 때 수정할 지 말지 물어봄


 

3.1 컴파일러

 

gcc 컴파일러

$ gcc [-옵션] 파일 

-c : 목적파일까지 생성

-o 파일명 : a.out 대신의 별도의 실행파일 지정

 

-O# : 컴파일 최적화 수행

-O0: 최적화를 수행하지 않음

-O1,O2: 최적화 수행(O2가 기본 옵션)

-Os: 사이즈 최적화

 

-l : 컴파일에 사용되는 라이브러리를 명시적으로 지정함

-D: 매크로 지정

 

심볼 정의(-DVALUE option)

 

test.c 파일이 있다

#include <stdio.h>
int main(int argc, char **argv)
{
printf("Hello World! %d\n",VALUE);
return 0;
}

이 예시코드에서 VALUE 변수가 지정되어있지 않다

이걸 그냥 $ gcc test.c 로 컴파일 하는 경우에 에러가 발생한다

$ gcc -DVALUE=10 test.c 로 컴파일을 하게되면 VALUE변수에 10이라는 값을 줄 수 있다

 

심볼 정의는 디버깅에 사용되기도 한다는데.

 

#include <stdio.h>
int main(){
	#ifdef DEBUG
    	printf("DEBUG\n");
    #endif 
    	printf("Hello World\n");
   	return 0;
}

이런식의 test.c 파일이 있다고 하자

$ gcc test.c

$ ./a.out ==> Hello World 

 

$ gcc -DDEBUG test.c

$./a.out ==> DEBUG\n Hello World

 


3.4 라이브러리 관리

 

라이브러리 바인딩

동적 라이브러리: 기본 설정. 공유 라이브러리 사용. 코드의 크기가 작지만, 실행 속도가 느림

정적 라이브러리: 라이브러리의 모든 코드를 실행파일에 포함시킴. 코드의 크기가 크지만 실행 속도가 빠르다.

 

참고: 리눅스에서는 두개의 라이브러리가 공존할 경우, 동적 라이브러리를 우선 호출함.

 

728x90
반응형

'2022-2 > 시스템 프로그래밍' 카테고리의 다른 글

gdb 디버거  (3) 2022.10.14
make 시스템  (0) 2022.10.11
2장 - 리눅스 사용  (2) 2022.10.07
1장 - 유닉스 리눅스 소개  (0) 2022.10.07
리눅스 여러가지 명령어들  (0) 2022.09.18

댓글