C & C++ 31

[Linux] exit과 _exit의 차이

리눅스 시스템 프로그래밍을 할적에 _exit을 본적이 있는데 exit은 main문제에서 쓰이는 반면 _exit은 자식 프로세스의 동작이 확실시되는 곳에서 사용되는 경우가 있었다. 둘 사이의 차이가 사후처리 즉 뒤처리를 하고 종료하느냐 하지 않느냐의 차이로 알고 있었는데 자식 process에서 쓰이는걸 보면 뭔가 이유가 있겠다 싶었다. 아래가 해당 자세한 내용이다. exit() 함수는 표준 입출력 정리 루틴을 수행하고 _exit()를 호출한다. exit() 함수는 파일 스트림에 대해서 동일한 작업을 수행하는데, 열려있는 파일의 스트림에 대해서는 fclose() 함수를 호출해서 버퍼에 남은 데이터를 모두 출력(flush)한다 일반적으로 _exit() 함수는 표준 입출력과 관련된 정리 작업을 수행하지 않는 것..

C & C++/C 2021.10.12

[C] 메모리와 변수의 lifetime으로 인한 예상치 못한 결과

글 앞 내용에 잘못된 내용이 등장합니다. 혼자서 추측했던 내용이라 잘못된 내용인데 그냥 결과만 확인하고 싶은 분은 글 맨아래로 가셔서 파란색 문단을 읽으시면 됩니다.  굉장히 신기한 내용을 접하게 되었다. 우선 아래 코드를 먼저 보면 아주 간단한 코드인데 척 보면 무슨 결과가 나올지 짐작일 갈 것이다.  #include int fun() { static int count = 0; count++; return count; } int main() { printf("%d ", fun()); printf("%d ", fun()); return 0; } 위와같은 코드를 봤을때, 딱 보면 아 static으로 선언되있기는 한데 그런데 어차피 다시 또 0으로 초기화를 해주기 때문에 결과가 1 1 이 나오겠구나라고 생각..

C & C++/C 2021.10.08

[Linux] Ubuntu c programming - file open /read /write

오랜만에 우분투에서 또다시 코드를 작성하게 되었다. 예전에는 리눅스에서 뭔가 작성한다고 하면 잔뜩 겁을 먹었었는데 지난번에 어셈블리어 수업을 듣게 된 이후로는 그나마 덜한 것 같다. 그전까지는 아예 기본적인 사용법조차 몰랐고 터미널에서 길을 잃어서 한참을 헤맸던 기억이 난다. 한마디로 별것도 아닌일때문에 삽질을 좀 많이 했었다. 그래도 지금은 좀 나아진것 같다. 지난번에는 Vmware WorksStation을 사용해서 작성했었는데 이번에는 Oracle VM VirtualBox를 이용해서 우분투에서 작성하게 되었다. 두 제품의 차이에 대해서는 잘 모르는데 나중에 이부분도 따로 찾아서 정리해놓으면 좋을 것 같다. 근데 사실 막상 써보면 별 차이 없긴 하다. 시스템 콜을 사용해서 아주 간단한 프로그램을 작성하..

C & C++/C 2021.09.30

[C] C언어 세그멘테이션 오류 (코어 덤프됨)

리눅스에서 c언어로 시스템 프로그래밍 관련 코드를 작성하고 있었는데 세그멘테이션 오류(코어 덤프됨) 이라는 에러가 발생했다. 예전에도 한번 발생했던 기억이 있는데 그 당시에 오류 원인은 찾지 못했고 코드를 고쳐주었더니 해결된 적이 있었다. 세그멘테이션 오류는 - 포인터를 잘못 사용했을 경우 - 혹은 배열의 메모리를 잘못 사용했을 경우 - 포인터로 지정해놓고 초기화도 메모리 할당도 안해줬을 경우 위와 같은 경우에 발생한다고 한다. 나의 경우 지금은 에러가 사라져서 원인이 뭐였는지 확실하게 짚이지는 않는데 아마 터미널에서 아규먼트를 전달했어야 했는데 전달하지 않았으면서 내부 코드에서 그 요소를 사용하려고 접근했기 때문이 아닐까 라고 예상된다. int main(int argc, char* argv[]) { /..

C & C++/C 2021.09.29

[Linux] fcntl.h와 unistd.h

매번 include하여 사용했는데 왜 쓰는지 몰랐던 헤더가 있다. 바로 fcntl.h와 unistd.h이다. 두 파일 모두 C POSIX 라이브러리 헤더 파일이다. C POSIX 라이브러리는 C 표준 라이브러리 POSIX에 대한 시스템 사양이다. ANSI C 의 표준으로 동시에 개발되어다. 두 헤더 모두 C POSIX 라이브러리 헤더 파일 중 하나이다. fcntl.h: 파일을 열고, 잠금 및 다른 작업을 할 수 있음 unistd.h: 다양한 필수 POSIX 함수와 상수 fcntl.h에 대해서 조금 더 살펴보면 파일 및 레코드 잠금을 구현하는 시스템 호출이라고 한다. 읽기 잠금을 통해 여러 프로세스가 공유 가능한 읽기 잠금 쓰기 잠금을 통해 한 프로세스만이 가질 수 있는 쓰기 잠금이 가능하다고 한다. op..

C & C++/C 2021.09.14

[C] void main(), int main(), main() 차이점

세 형태의 차이점에 대해 이야기해보고자 한다. 사실은 별 차이 없다고 한다. 간략하게 정리하자면 아래와 같다. 함수 정의 앞에 붙은 데이터 형은 함수의 리턴값의 데이터 형이고 int main()이면 main()함수가 종료할때 정수형 값을 리턴하겠다는 뜻이다. void main() 이면 함수가 종료할때 아무 값도 리턴하지 않겠다는 뜻이다. 그리고 그냥 main()은 void main()과 같다고 한다. main() 함수는 프로그램의 엔트리 포인트이고 운영체제가 실행시켜주는 함수라고 한다. 그래서 main() 함수의 리턴값은 운영체제가 받아보게 된다고 한다. 운영체제는 프로그램이 종료할때 main() 함수의 리턴값을 받고 이를 통해 프로그램이 왜 종료되었는지 판단한다고 한다. 보통 main()이 0을 리턴하..

C & C++/C 2021.07.03

[Linux] 우분투에서 비어있지 않은 폴더 삭제하기 - Directory not empty

폴더를 삭제하려고 하는데 Directory not empty 가 발생했다. 지우려는 폴더 안에 뭔가 여러개가 들어있단 소리다. 폴더든 파일이든 뭐가 있다는 소리다. 안이 비지 않아서 삭제 못한다고 하는데 이럴때는 sudo rm -r [폴더이름] 이렇게 작성해주면 삭제할 수 있다. (참고로 -r 의 r은 recursive의 의미이다. 깊게 돌면서 들어가서 다 지워나가겠다는 거다. 아마 실제 구현도 디렉토리 트리 구조 내에서 recursive한 방식으로 순회하면서 뒤로 돌아나오면서 삭제하지 않을까 싶다. 어떻게 구현된지는 잘 모르겠지만 아마 실제 그렇게 구현해도 아무 문제 없이 동작할거다.) https://noosphere.tistory.com/90 [linux]비어있지 않은 폴더 지우는 방법 에러 rmdi..

C & C++/Linux 2021.06.27

[Linux] 리눅스 gcc 에서 c언어 컴파일, 32비트 어셈블리 코드 확인하기

c언어를 컴파일 하는 과정에서 어셈블리 코드를 확인하는 과제가 있었는데 리눅스에서 컴파일했던 기억이 까마득해서 에러때문에 고생좀 했다. 우선 방법은 간단하다. 그냥 .c형식의 c소스코드를 작성해주고 gcc -O1 -S -m32 test.c 이렇게 적어주면 된다. -m32는 32비트 어셈블리를 확인하겠다는거고 -S는 어셈 코드를 보겠다는거고 -O1은 최적화 단계를 설정해주는 거다. 이것도 O이 숫자인줄 알고 계속 하다가 뭔가 생겨먹은게 이상해서 그제야 알아차린거다. 지금 생각해보면 웃기긴한데 심각하게 왜 안되는지 이리저리 애먹었다... ㅋㅋ 아마 Optimization이라는 뜻인걸까? 특히 c를 컴파일해줄때 bits/libc-header-start.h: No such file or directory 오류 ..

C & C++/Linux 2021.05.20

[C++] 마이크로소프트 c++ 도큐먼트

c++ 관련해서 이것저것 검색하다가 마이크로소프트 c++ 머시기가 뜨길래 들어가보니 마소에서 제공하는 c++ 도큐먼트같은게 떴다. 살짝 훑어봤는데, 나름 잘 정리되있는 것 같더라. pdf로 다운도 받을 수 있어서 다운 받았는데, 번역도 잘 되있고, 꽤나 괜찮아 보인다... 내가원하는건 스레딩이었는데, 음... 안나와있다. 그래도 나름 괜찮은 자료이니 모셔서 저장하기... 언젠간 읽어볼 일이 생길듯. docs.microsoft.com/ko-kr/cpp/cpp/templates-cpp?view=msvc-160 템플릿 (C++) 자세한 정보: 템플릿 (c + +) docs.microsoft.com

C & C++/C++ 2021.04.19

[C] 4년이 지나서 다시보는 C언어 - 핵심 정리

윤성우님께서 쓰신 "열혈 자료구조"를 보려고 너무 오랜만에 책을 펼쳤는데, 순간 당황했다. c언어에서 사용되는 -> 기호가 무슨 뜻이었는지 기억이 가물 가물 하면서 기억나질 않았다. 그래서 당황해서 급하게 서현우씨께서 쓰신 "이것이 c언어다" 책을 펼쳤다. (기억이 안날만도 하다. 2년의 공백이 너무 컸다.) 지금 4년 만에 다시 펼쳐보는 것 같다. 기본기를 소홀히 한 대가다. 요즘 들어서 느끼는 게 있는데, 아무리 서비스 위주의 기술들 중에서 핫한 기술들이 뜨고 이것저것 나오더라도 기본기는 언제나 중요하다는 것을 느낀다. 아무리 빠르고, 성능 좋은 라이브러리라 하더라도 c++과 c를 기반으로 작성되어있는 경우가 많았고, 성능이라는 면에서 아직도 이 둘을 따라올 언어가 없다고 생각한다. 그러니 기초적으로..

C & C++/C 2021.03.06
반응형