일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- C++
- 바로꺼짐
- 백준 14888번
- 로봇청소기
- chromeSetup.exe 안됨
- ChromeStandaloneSetup64안됨
- 크롬 설치 안됨
- 크롬설치
- 삼성 sw 역량테스트
- 연산자 끼워넣기
- 크롬설치파일꺼짐
- chromeSetup.exe꺼짐
- 백준 14503번
- Today
- Total
목록시스템 프로그래밍 - 리눅스 (21)
공대생의 개발 일기장
socket이 정말 어려웠는데 네트워크 환경에서 서로 연결이 됐다 안됐다해서 정말 어려웠다. 근데 생각해보니 보통 서버 - 클라이언트 관계라고 하면 1 : n의 관계아닌가? 그래서 이번에는 그렇게 여러 개의 클라이언트를 연결하는 Select 함수를 생각해보자. 사실 자식 프로세스를 만드는 fork로 해도 뭔가 될 것 같은데... 찾아보니 실제로 fork와 select를 둘 다 쓴다고 한다. fork는 서로 통신하지 않는 약간 일방적인 단방향적인 서버인 경우에는 fork가 좋고, 그럼 당연히 반대로 select는 양방향적인 서버의 경우에는 select가 좋다. 각각의 단점은 찾아보면 그냥 혹시나 코드를 찾아본다면 알겠지만 그냥 fork는 프로그래밍이 쉽고 select는 어렵다. select는 bit vec..
저번 network 배운걸로 실습을 한 번 해봤는데 역시 실습이 짱이다. 걍 빠르게 이해가 된다. network부분은 포스팅한 부분은 내가 정말정말 핵심적이라고 생각했던 것만 따로 정리한거니까 그냥 빠르게 흝는용으로 쓰고 학습에 대한 부분은 실습을 한 번하는게 더 빨리 이해한다. protocol이 뭔지 알아보자. 사실 protocol 단어 자체는 많이 들어봤을 것이다. 근데 뜻은 모른다. 일단 내가 그렇다. '데이터 통신을 원활하게 하기 위해 필요한 통신 규약'이 그 개념이다. 즉, 약속! 이를 지키지 않으면 연결이 되지 않는 것이다. 음... 사실 어떤 과정을 거치는지 더 말할 수 있지만 너무 복잡하고 보니까 각 데이터 영역마다 임의로 정할 수 있는지 워낙 다양해서 딱 여기까지만 설명하겠다. 그냥 pr..
network programming은 음... 사실 모르겠다. 갑자기 개념이 난해해졌달까? 일단은 socket에 대해서 생각해보자. socket이 뭐냐 file이다. 그럼 file과 차이는 뭐냐? 사실 나도 잘 모르겠다... 그냥 특별한 file!이라고 생각하면 편할 것 같다. 일단 이름부터 network니까 인터넷 환경을 이용한다고 생각될 것이다. 그리고 실제로 그렇다. 지금까지 실습한 것이 모두 한 컴퓨터에서 했었다면 network는 여러 대의 컴퓨터끼리 연결...? 그냥 network적 특징을 가진다고 보면될 것 같다. 여러 대의 컴퓨터를 이용하기 때문에 각 컴퓨터마다의 ip를 사용하고 또, port number라는 것도 이용한다. port number 음... ip를 주소라고 치면 port num..
pstree는 말 그대로 process의 tree형태를 보여준다. 명령어도 단순한데 $ps -f로 알고 싶은 프로세스의 PID를 파악한 후에 $pstree -sp (PID)로 명령어를 입력하면 pstree의 형태로 순서가 나열된다. 여기서 -s는 show parents로 선택된 프로세스의 부모를 같이 보여주고 -p는 PID를 함께 출력하는 명령어이다. $env라는 command를 치면 환경변수의 리스트를 보여준다. 뭐 여러개가 나온다. $echo $PATH라고 하면 특정 환경변수만 보여준다. 근데 사실 echo니까 당연한거 아닌가...? 싶기는 한데 어쨌든 다르다. 아마 한번 command를 쳐보면 알 것이다.
fork를 사용하면 디버깅할 때 프로세스가 여러개가 되기 때문에 gdb로 fork를 실행하는 파일을 열어보면 부모 코드를 default로 따라가게 되어있다. 그럼 자식을 따라가고 싶으면 $gdb ex1 (gdb) set follow-fork-mode child 이와 같이 입력하면 따라가며 디버깅할 수 있다.
fork, exec에 이은 System calls for process의 명령어 exit와 wait에 대해서 알아보자. 먼저 exit를 보자. exit은 기본적으로 프로그램을 끝내라는 것이다. 프로그램이 exit()을 호출하면 시스템이 이 프로그램을 stop시킨다. 즉, 시스템에서 지운다. 이 exit의 경우에는 프로그램이 호출하는 경우도 있고 그렇지 않은 경우도 있다. 프로그램이 exit( )을 호출하지 않아도 프로그램의 main이 끝나면 시스템이 자동으로 exit( )을 호출해준다. 즉, 프로그램이 종료된다. 종료가 되면 이 프로그램을 시스템에서 지워야하는데 이 프로세스는 Body와 process discripter 두 개중에서 exit( )는 Body만 지운다. 그렇다면 process discrip..
fork와 wait를 이용하여 자식 프로세스만 실행시키는 식으로 execve를 반복 실행시키거나 순서를 정할 수 있다. if(fork() == 0){ // 실행내용 execve(argv[0], argv, 0); } else{ wait(0); // 추가로 printf를 넣어도되고 안넣어도되고 } getcwd는 쉽게 말해 현재 있는 경로를 받는다. buf는 그 경로를 저장할 공간이고, size는 buf에 할당된 메모리 크기를 말한다. #include char *getcwd(char *buf, size_t size);
fork에 이은 두번째 System call인 exec에 대해서 알아보자. 실제 System call의 함수 모양은 여러개인데(execve, execl...) 여기서는 일단 몇 개만 살펴볼 것이다. exec을 호출하면 program을 다른 program으로 trasform을 해준다. -remove old body -load new body -adjust process descriptor 의 순서로 진행된다. 좀 더 자세히 살펴보면 execve("ex1", ...)로 ex2로 실행하면 ex2의 body를 지운다. 그 다음 ex2 실행파일을 읽어서 메모리에 load한다. 메모리 위치 mm이 ex2의 body를 가리키다가 ex1을 가리키게되어 결국 ex1이 실행되게 된다. 당연히 성공한 경우와 실패한 경우로 ..