[Daily Post] 221109
[Daily Post]는 매일매일 탐구한 내용을 간략하게 기록하는 포스트입니다.
따라서 정리되지 않은 내용과 추측을 포함하고 있을 수 있습니다.
더 체계적인 형식을 갖춘 글은 해당 카테고리의 포스트를 확인해주세요 :)
Daily Study
Unix Process Management
IPC
C 소스코드에 unix 실행 함수 넣는법, unix 함수 실행 결과를 C 소스코드에서 받는 법
오늘의 시행착오
execl 함수
- execl 함수의 synopsis는 다음과 같다
int execl(const char *path, char *arg0, char *arg1, ... , NULL); - 첫번째 인자는 실행하려는 바이너리 파일의 경로이고, 이어서 해당 바이너리 파일의 입력값으로 전달할 argument를 넘겨준다.
- argument를 전달하고 나면 마지막 인자로는 NULL을 전달한다.
- NULL을 넣지 않으면 어디까지가 arg인지 구분할 수 없기 때문에 NULL을 꼭 마지막 인자로 넣어줘야 한다.
iOS VSC와 Linux 서버의 차이
- 질문이나 카테고리가 맞는지조차 모르겠지만, 우선 문제 상황은 다음과 같다.
- 로컬(iOS VSC)에서 getcwd 함수를 실행하면, 정상적으로 currently working directory를 반환한다.
- Linux에서 같은 함수를 복붙하여 make 후 실행하면, NULL이 반환된다.
- 일단 getcwd를 사용하지 않는 선에서 해결했지만, 왜 이런 차이가 생기는지는 조교님께 여쭤봐야 할 것 같다.
Segmentation Fault
- 예전에는 seg fault 뜨면 매우 좌절했었지만, 이제는 덜 좌절할 수 있다.
- seg fault 뜨기 전후의 수정사항을 다시 확인하고, 라인별로 주석처리를 해가면서 테스트를 진행하면 어디서 seg fault가 뜨는지 확인할 수 있다.
- 오전에 떴던 seg fault 같은 경우에는 7 byte 배열을 선언해놓고, 8 byte의 시작 주소를 참조해서 생긴 오류였다.
- 오류가 뜨는 것 자체는 문제가 되지 않는다. 다만 이 오류의 근원을 찾아낼 수 있는지, 찾아낸 근원을 옳게 수정할 수 있는지가 관건이다.