맞는데 왜 틀릴까..?

Linux 17

[리눅스] 시스템 프로그래밍 - 메모리 관리

프로세스 구조 코드 세그먼트 : 기계어 명령어, 리터럴 상수, 프로그램 코드 및 상수 저장 공간 데이터 세그먼트 : 전역 변수, 정적 변수 스택 : 실행 시간 스택으로 함수가 호출될 때마다 생성, (지역 변수, 매개 변수, 반환 주소, 반환 값) 등 저장 힙 : 동적 메모리 할당 (malloc in C) 동적 할당 필요할 때 필요한 만큼만 메모리를 요청해서 사용하여 메모리를 절약한다. 사용한 후 더이상 필요가 없을 경우, 해당 영역을 반납한다. malloc() 은 주소를 반환하는데, 다양한 타입의 메모리 할당이 가능하다. (char, int, double) 따라서 malloc()의 포인터 타입은 void* 이므로 형변환이 필수 int* score = (int*)malloc(num*sizeof(int));..

Linux 2022.12.09

[리눅스] 시스템 프로그래밍 - 프로세스 제어

프로세스 생성 fork() 부모 프로세스를 똑같이 복제하여 새로운 자식 프로세스를 생성 새로운 프로세스를 생성하는 유일한 방법 코드, 데이터, 스택, 힙 등을 똑같이 복제 fork()는 한 번 호출되면 두 번 리턴함 (호출 후에는 프로세서가 둘이기 때문에) #include #include pid_t fork(void); //새로운 자식 프로세스를 생성 //자식 프로세스에게는 0 //부모 프로세스에게는 자식 프로세스 ID를 리턴 자식은 부모의 fd 테이블을 복사한다 자식에게 상속되지 않는 성질 fork()의 반환 값 프로세스 ID 파일 잠금 속성 설정된 알람과 시그널 fork1.c 자식 프로세스를 생성하는 코드를 짠 후 프로세스의 실행 결과를 확인해 보자 #include #include /* 자식 프로세스..

Linux 2022.12.05

[리눅스] 시스템 프로그래밍 - 프로세스

프로세스 리눅스에서 프로그램이 실행되는 과정 사용자가 프로그램을 쉘 프롬프트에서 지정하여 실행 : 내부적으로 현재 실행 중인 프로그램(shell) 내에서 fork() & exec() 시스템 호출을 통해 새로운 프로그램이 실행됨 C 시작 루틴 : 컴파일러가 실행 파일에 C 시작 루틴을 포함 시킴. 이 루틴은 exec로부터 전달받은 명령줄 인수, 환경 변수를 main 함수로 전달하는 역할을 수행함 프로그램 실행 종료 Main 함수의 실행이 끝나면 exit( main (argc, argv) )를 호출 C 시작 루틴은 프로그램의 실행이 끝나면 main 함수로 부터 반환 값을 받아 exit 한다. 정상 종료 : Main 함수 return 0 -> C 시작 루틴이 Exit(0) 을 호출 -> 커널 수행 - > sc..

Linux 2022.12.02

[리눅스] 시스템 프로그래밍 - 파일 시스템

파일 시스템 물리적으로 디스크 혹은 다양한 저장장치들로 구성된 저장공간을 논리적 형태로 변환시켜 관리하며 사용자가 이를 접근하여 사용할 수 있도록 해준다. df : 파일 시스템에 대한 디스크 사용 정보를 보여준다. du [-s] 파일명* : 파일 혹은 디렉토리의 사용량을 보여준다. 파일을 명시하지 않으면 현재 디렉토리 내의 모든 파일들의 사용 공간을 보여준다. 파일 시스템 구조 부트 블록 : 파일 시스템 시작부에 위치하고 보통 첫 번째 섹터에 위치. 부트 스트랩 코드가 저장되는 블록 슈퍼 블록 : 전체 파일 시스템에 대한 정보를 저장 (총 블록수, 사용 가능한 i-노드 개수, 사용 가능한 블록 비트 맵, 블록의 크기, 사용 중인 블록 수, 사용 가능한 블록수 ) i-리스트 : 각 파일을 나타내는 모든 i..

Linux 2022.11.23

[리눅스] 시스템 프로그래밍 - 파일 입출력

시스템 호출 시스템 호출은 커널에 서비스 요청을 위한 프로그래밍 인터페이스로, 응용 프로그램은 시스템 호출을 통해서 커널에 서비스를 요청한다. 주요 시스템 호출 파일 : open(), close(), read(), write(), dup(), lseek() 등 프로세스 : fork(), exec(), exit(), wait(), getpid(), getppid() 등 메모리 : malloc(), calloc(), free() 등 시그널 : signal(), alarm(), kill(), sleep() 등 프로세스 간 통신 : pipe(), socket() 등 파일 유닉스에서 파일이란 연속된 바이트의 나열을 뜻한다. 유닉스와 리눅스는 그 이외의 파일별 특별한 다른 포맷을 정의하지 않음 디스크 파일 뿐만 아..

Linux 2022.11.23

[리눅스] 유틸리티

링크 기존의 파일에 또 하나의 새로운 이름 혹은 경로를 부여 심볼릭 링크 ln -s [파일1] [파일2] 다른 파일을 가리키고 있는 별개의 파일이다 원래 파일의 위치에 대한 정보가 들어있어서 심볼릭 링크를 참조하면 가리키고 있는 파일을 대신 참조함 (실제 파일의 경로명을 저장하고 있는 일종의 특수 파일이다) 심볼릭 링크의 원본이 삭제되면 참조 불가 하드 링크 ln [파일1] [파일2] 기존 파일에 대한 새로운 이름이라고 생각할 수 있다. 실제로 기존 파일을 대표하는 i-node를 가리켜 구현 둘 중에 한 파일을 삭제해도 아무 문제없다 심볼릭 링크와 하드링크 비교 물리적으로 서로 다른 파일 시스템 사이에는 하드링크 불가능 (심볼릭 링크 : 가능) 디렉토리에 대한 하드링크는 슈퍼 유저만 가능 (심볼릭 링크 ..

Linux 2022.10.17

[리눅스] 파일 관련 명령어

grep grep [패턴] [파일명] 파일들을 대상으로 지정된 패턴의 문자열을 검색하고, 해당 문자열을 포함하는 줄들을 출력한다 -i : 대소문자를 무시하고 검색 -n : 각 줄의 줄 번호도 함께 출력 -v : 명시된 패턴을 포함하지 않는 줄을 출력 -w : 패턴이 하나의 단어로 된 것만 검색 grep -w 'st.*' you.txt ## st로 시작되는 모든 단어 형식 출력 grep -w 'w.*t' you.txt ## w로 시작하고 t로 끝나는 모든 단어 형식 출력 sort sort [-옵션] [파일명] 텍스트 파일의 내용을 줄 단위로 정렬한다. 옵션에 따라 다양한 형태로 정렬 가능 정렬 필드를 기준으로 줄 단위로 오름차순 정렬 (a to z) 기본적으로 각 줄의 첫번째 필드가 정렬 필드 -r : 내..

Linux 2022.10.16

[리눅스] 후면 처리 및 프로세스

전면 처리 명령어를 입력하면 명령어가 전면에서 실행되며, 명령어 실행이 끝날 때까지 쉘이 기다려준다 Ctrl-C : 전면 처리 강제 종료 Ctrl-Z : 실행 중단 fg : 제일 최근 job을 전면에서 재실행 후면 처리 명령어들을 후면에서 처리하고 전면에서는 다른 작업을 할 수 있으면 동시에 여러 작업을 수행할 수 있다. 시간이 오래 걸리는 작업등의 실행에 유용 명령어 & : 후면 작업으로 실행 예시 후면작업 실행 (sleep 100; echo done) & ## 명령어 후면 처리 find . -name test.c -print & ## 명령어 후면 처리 실행결과 [1] 8320 [2] 8325 후면 작업을 전면 작업으로 전환 fg %[작업번호] fg %1 ## 후면 실행 중인 작업번호 1번을 선택하여 ..

Linux 2022.10.16

[리눅스] 입출력 재지정 및 파이프

출력 재지정 명령어의 표준출력 내용을 모니터에 출력하는 대신에 파일에 저장 예시 명령어 > 파일 who > names.txt ls / > list.txt file1의 모든 내용을 file2라는 다른 이름으로 저장해보자 cat file1 >> file2 grep "." file1 >> file2 more file1 > file2 입력 재지정 명령어의 표준입력을 키보드 대신에 파일에서 받는다 예시 명령어 < 파일 wc < list1.txt 파이프 명령어1 | 명령어2 명령어1의 표준출력을 명령어2의 표준입력으로 받는다 예시 who | sort : 로그인 된 사용자 이름 정렬 who | wc -l : 로그인 된 사용자 수 출력 ls [디렉토리] | wc -w : 특정 디렉토리 내의 파일의 개수 출력

Linux 2022.10.16

[리눅스] 권한

사용권한 r : 파일에 대한 읽기 권한 w : 파일에 대한 쓰기 권한 x : 파일에 대한 실행 권한 파일의 사용권한은 소유자(owner), 그룹(group), 기타(others)로 구분하여 관리한다. 접근 권한 변경 chmod [-R] [사용권한] [파일명] 파일 혹은 디렉토리의 사용권한을 변경하는 명령어 chmod 664 cs1.txt ## 8진수 rw-rw--w- chmod g+w cs1.txt ## group에 w 추가 UMASK (기본 권한 설정) 새로운 파일이 만들어질 때 적용되는 기본 권한 마스크 값을 지정하지 않으면 현재의 마스크 값을 보여줌 사용권한에서 허용하지 않을 값을 지정 umask 077 -> 새로운 파일이 만들어질 때 700의 권한으로 만들어짐 파일 소유권 변경 chown [-R]..

Linux 2022.10.16