C,C++ & Linux
-
C/C++ vfork(2)C,C++ & Linux 2020. 5. 24. 02:21
함수 기능 자식 프로세스를 생성하되 자식 프로세스가 먼저 실행됨을 보장하는 함수입니다. vfork() 함수는 자식 프로세스가 exec() 계열의 함수를 호출하는것을 전제로 하고 사용하는 함수입니다. vfork() 함수 호출 시 자식 프로세스가 먼저 실행됨을 보장할 뿐만 아니라 _exit() 되거나 exec() 될 때까지 부모 프로세스는 대기합니다. fork() 함수와는 달리 메모리를 복사하지 않기 때문에 약간의 성능적 이득이 있습니다. 다만 exit() 함수를 자식 프로세스에서 호출하게 되면 메모리를 복사하지 않기 때문에 부모 프로세스의 기본 입출력 파일까지 모두 닫아버려서 부모 프로세스는 표준 입출력 파일을 사용할 수 없는 문제가 생기므로 vfork() 로 생성된 자식 프로세스는 _exit() 함수로 ..
-
C/C++ fork(2)C,C++ & Linux 2020. 5. 24. 01:53
함수 기능 자식 프로세스를 생성해주는 함수입니다. 자식 프로세스는 부모 프로세스의 복사본입니다. 따라서 fork() 이후의 동작은 같은 코드에 의해 동작합니다. 자식 프로세스는 Stack 영역, Data 영역, Heap 영역에 대해 복사본을 갖기에 둘이 같은 공간을 참조하지는 않지만 Text(Code)영역은 부모 프로세스의 영역을 공유합니다. 다만 자식 프로세스가 생성될 때부터 Stack, Data, Heap 영역에 대한 복사본을 갖게 되는 것은 아닙니다. fork() 함수 이후에는 exec 계열의 함수를 호출하는 경우가 많기 때문에 미리 복사해두지 않고 부모 프로세스나 자식 프로세스가 Stack, Data, Heap 중 어느 한 곳이라도 수정하게 되는 순간 복사하는 COW(Copy On Write) 정..
-
C/C++ getpid(2) getppid(2) getuid(2) geteuid(2) getgid(2) getegid(2)C,C++ & Linux 2020. 5. 23. 13:51
함수 기능 프로세스 아이디 관련한 함수들입니다. getpid() : 호출한 프로세스의 프로세스 아이디를 알려줍니다. getppid() : 호출한 프로세스의 부모 프로세스 아이디를 알려줍니다. getuid() : 호출한 프로세스의 사용자 아이디를 알려줍니다. geteuid() : 호출한 프로세스의 유효사용자 아이디를 알려줍니다. getgid() : 호출한 프로세스의 그룹 아이디를 알려줍니다. getegid() : 호출한 프로세스의 유효 그룹 아이디를 알려줍니다. 함수 원형 #include #include pid_t getpid(); pid_t getppid(); uid_t getuid(); uid_t geteuid(); gid_t getgid(); gid_t getegid(); 반환값 각 함수에 맞는 아이..
-
C/C++ setrlimit(2) getrlimit(2)C,C++ & Linux 2020. 5. 23. 03:51
함수 기능 리소스 한계치를 알아내거나 바꾸는 함수입니다. 시스템마다 리소스의 한계치로 설정된 값들이 있습니다. 예를 들면 파일명 최대 길이, 프로세스 당 열 수 있는 최대 파일의 갯수 등이 있죠 getrlimit() 함수는 이 한계치를 알아낼 수 있는 함수이고, setrlimit() 함수는 바꿀 수 있는 함수입니다. 리소스 종류 구성요소 내용 RLIMIT_AS 한 프로세스의 총 자유 메모리 용량의 최댓값(바이트 단위) RLIMIT_CORE 한 코어 파일의 최대 크기 RLIMIT_CPU 프로세스가 소비할 수 있는 최대 CPU 시간(초 단위) RLIMIT_DATA Data 영역 전체의 최대 크기 RLIMIT_FSIZE 파일 생성 시 파일의 최대 크기 RLIMIT_LOCKS 프로세스가 가질 수 있는 파일 락의..
-
C/C++ setjmp(3) longjmp(3)C,C++ & Linux 2020. 5. 23. 00:29
함수 기능 함수의 경계를 넘나드는 분기처리를 하기 위해 사용되는 함수입니다. setjmp() 를 통해 마킹을 해두고, 나중에 longjmp() 를 호출하면 해당 마킹장소로 돌아오는 방식입니다. 함수 원형 #include int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); 매개변수 env 현재 상태에 대한 정보를 저장하는 객체입니다. setjmp() 가 실행되는 순간의 함스 스택 환경과 레지스터 환경을 env 변수에 저장합니다. 이후 longjmp() 함수가 호출되면 env 에 담긴 정보를 바탕으로 회귀하는 방식입니다. val longjmp() 함수에서 넘긴 val 값이 setjmp() 함수의 리턴값이 됩니다. 반환값 스스로 호출된 경우 0 리턴 l..
-
C/C++ setenv(3) unsetenv(3)C,C++ & Linux 2020. 5. 23. 00:11
함수 기능 환경변수 값을 추가하고 삭제할 수 있는 함수입니다. 함수 원형 #include int setenv(const char *name, const char *value, int rewrite); int unsetenv(const char *name); 매개변수 name 추가하거나 삭제하고 싶은 환경변수의 이름 value 지정한 name 의 환경변수 값(value) rewrite 이미 지정한 name의 환경변수가 존재할 때 rewrite가 0이면 변경하지 않고 그대로 둡니다. 1이면 새로운 값으로 변경합니다. 반환값 성공 시 0 리턴 에러 시 -1 리턴하고 errno 설정 리눅스시스템프로그래밍 저자 : 홍지만 https://book.naver.com/bookdb/book_detail.nhn?bid=1..
-
C/C++ putenv(3)C,C++ & Linux 2020. 5. 22. 22:28
함수 기능 환경 변수에 값을 추가하는 함수 프로세스가 종료되면 추가됐던 환경변수들은 자동으로 삭제됩니다. 함수 원형 #include int putenv(const char *str); 매개변수 str 환경변수에 추가할 문자열 환경변수는 "이름=값"의 형태로 이루어져야합니다. 반환값 성공 시 0 리턴 에러 시 0이 아닌 정수를 리턴하고 errno 설정 예제 #include #include #include #include extern char **environ; char glob_var[] = "HOBBY=swimming"; void ssu_addone() { char str[10]; // 지역변수를 환경변수에 추가 strcpy(str, "LOVER=js"); putenv(str); } int main(in..
-
C/C++ getenv(3)C,C++ & Linux 2020. 5. 22. 22:09
함수 기능 지정한 이름의 환경 변수를 얻는 함수입니다. 환경변수는 "이름=값"의 형태로 이루어져있습니다. 모든 환경변수의 리스트는 전역변수 envrion 과 main 함수의 세 번째 인자로도 얻을 수 있지만 특정 환경변수의 값만 알고 싶은 경우 이 함수를 사용할 수 있습니다. 함수 원형 #include char *getenv(const char *name); 매개변수 name 이름 변수로, 지정한 이름의 환경변수 값을 얻을 수 있습니다. 반환값 성공 시 지정한 이름의 환경변수를 가리키는 포인터 리턴 에러 시 NULL 리턴하고 errno 설정 예제 #include #include #include int main(int argc, char *argv[], char *envpp[]) { char buf[BUF..