
중구난방으로 공부 시작..
실습과 그림으로 배우는 리눅스 구조라는 책을 한권 공부 해보려고 한다.
근데 초장부터 막힌다...
암튼 막히는 부분을 이야기 해보자면,
3장 프로세스 관리 챕터에서 아래와 같은 코드가 주어지는데,
https://github.com/satoru-takeuchi/linux-in-practice/blob/master/03-process-management/fork.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
static void child()
{
printf("I'm child! my pid is %d.\n", getpid());
exit(EXIT_SUCCESS);
}
static void parent(pid_t pid_c)
{
printf("I'm parent! my pid is %d and the pid of my child is %d.\n",
getpid(), pid_c);
exit(EXIT_SUCCESS);
}
int main(void)
{
pid_t ret;
ret = fork();
if (ret == -1)
err(EXIT_FAILURE, "fork() failed");
if (ret == 0) {
// child process came here because fork() returns 0 for child process
child();
} else {
// parent process came here because fork() returns the pid of newly created child process (> 1)
parent(ret);
}
// shouldn't reach here
err(EXIT_FAILURE, "shouldn't reach here");
}입력하세요
fork()함수의 실행 프로세스에 대한 부분이다.
여기서 pid_t가 뭔지 몰라서 한참 생각 및 서치 해봤는데, 자료형이다..
프로세스 id 를 나타내는 자료형이라고 하는데, 이것 조차도 모르다니.. 반성해라 나 자신,, 다시 처음으로 돌아가서 공부해야할것같다..
그리고 아래 다른 사람이 작성한 글을 가져왔는데 이 자료형을 쓰는 이유라고 한다. (무려 2010년에 작성되어 있는..)_
ssize_t, size_t, pid_t 는 고전적인(primitive) 자료형이라 한다.
일반적으로 헤더에 선언되어 있는데, 사실 C의 typedef 선언을 통해서 정의되어 있다.
즉 새롭게 등장한 것이 아니라, 잘 알고 있는 int, float, long과 같은 기본 자료형을 가지고,
이름만 바꾸어 정의해 놓은 것이다. 이러한 자료형들은 꽤 오래 전부터 존재하고 있엇다.
그렇다면 도대체 왜 이러한 것을 정의해 놓고 사용하는 것일까??
int, short, float 라고 하면 사용하기 편할 텐데..
지금은 int가 32비트라고 한다. 보편적으로 사용되는 운영체제와 컴퓨터가 32비트이기 때문이다.
과거 16비트 시설에는 int가 16비트였고 곧 64비트 시대가 도래 할 것이다.
즉, 시스템에 따라서 자료형의 표현 방식이 틀려지므로 내가 구현한 프로그램을 다른 시스템에서
실행 시키기 위해서는 코드의 수정 자체가 불가피하다.
그러나 4바이트의 자료형이 필요한 곳에, 지금 처럼 헤더파일에 unsigned int를 size_t로 정의해
놓고 쓰게 되면, 나중에 시스템이 변경되어서 unsigned int가 더 이상 4바이트를 나타내지 않게
되었을 때, 4바이트를 나타내는 다른 적절한 자료형을 가지고 헤더파일에 선언되어 있는 size_t를
재정의해 주기만 하면 된다.
즉 소스 코드는 바꾸지 않고 컴파일만 다시 한번 하면 새로운 시스템에서 잘 돌아가게 된다는 것이다.
이것이 int, double, short, float과 같은 특정 자료형에 종속되지 않도록, 새로운 이름의 자료형을 정의해 주는 이유가 된다.
보통은 다음과 같은 형식으로 정의한다.
size_t : unsigned 형태의 변수 선언
ssize_t : signed 형태의 변수 선언
pid_t : Process ID를 표현하기 위해서 사용
[출처] ssize_t, size_t, pid_t 타입 개념잡기|작성자 몽키몽키
그렇다고 한다.. 너무 예전에 작성된 글이라 퍼오기도 뭐하지만, 일단은 공부하면서 모르는 개념 정립을 위해서 이렇게라도 남겨둔다.