INTRO(2)

명칭
intro - 시스템 콜과 에러 번호의 소개

프로그램 라이브러리
libc

서식
<errno.h>

해설
이 섹션에서는, 시스템 콜, 에러 돌아와, 그 외의 공통된 정의 및 컨셉 의 개요에 대해 설명합니다.

반환값
거의 모든 시스템 콜이 외부 식별자 errno 에 의해 참조되는 에러 번호를 갖추고 있습니다. <sys/errno.h> 안에서 이 식별자는 다음과 같이 정의되고 있습니다.

    extern int * __error();
    #define errno (* __error())

__error() 함수는, 초기 thread 이외의 thread에 대해서는, thread에 고유한 구조체의 필드를 가리키는 포인터를 돌려줍니다. 초기 thread와 비thread 프로세스의 경우, __error() (은)는, 이전의 정의와 호환성이 있는 글로벌 변수 errno (을)를 가리키는 포인터를 돌려줍니다.

시스템 콜은, 에러를 검출하면(자), 장해를 나타내는 정수치 (통상은 -1) (을)를 돌려주어, 거기에 응해 변수 errno (을)를 설정합니다. <이것에 의해, -1 를 받았을 때에 장해를 해석해, 거기에 응한 행동을 취하는 것을 가능하게 합니다. > 호출이 정상적으로 완료했을 경우는 errno 하지만 설정될 것은 없습니다. 일단 설정되면(자), 다른 에러가 일어날 때까지 그대로입니다. 이것은 에러의 다음에만 조사해야 합니다. 많은 시스템 콜이 이러한 에러 번호의 의미를 과중하게 하고 있어, 의미는 호출의 타입과 상황에 따라 해석할 필요가 있는 것에 주의해 주세요.

이후에 나타내는 것은 에러의 완전한 리스트이며, 이러한 이름은 <sys/errno.h> 에 기재되어 있습니다.

0 Error 0
    미사용.

1 EPERM Operation not permitted
    「조작이 용서되지 않습니다」 적절한 특권을 가지는 프로세스로 한정된 조작, 또는 파일 그 외의 리소스의 소유자에게 한정된 조작을 실행하려고 했습니다.

2 ENOENT No such file or directory
    「그러한 파일 또는 디렉토리는 없습니다」 지정의 패스명의 원가요소가 존재하지 않는지, 또는 패스명이 하늘의 캐릭터 라인이었습니다.

3 ESRCH No such process
    「그러한 프로세스는 없습니다」 지정의 프로세스 ID 에 대응하는 프로세스가 발견되지 않았습니다.

4 EINTR Interrupted function call
    「함수 호출이 끼어들어졌습니다」 끼어들어 가능한 함수의 실행중에, 비동기 시그널 (예를 들어, SIGINT 또는 SIGQUIT) 하지만 프로세스에 의해 잡혔습니다. 시그널 핸들러가 정상적으로 돌아오면(자), 끼어들어 된 함수 호출이 에러 상태를 돌려준 것처럼 보입니다.

5 EIO Input/output error
    「입출력 에러입니다」 어떠한 물리적인 입력 에러 또는 출력 에러가 일어났습니다. 이 에러는, 같은 파일 기술자에 대한 조작이 다음에 행해질 때까지 보고되지 않고, 후속의 에러에 의해 없어진다 (덧쓰기될) 가능성이 있습니다.

6 ENXIO No such device or address
    「그러한 디바이스 또는 주소가 없습니다」 존재하지 않는 디바이스를 참조하고 있는 특수 파일에의 입출력이 행해졌는지, 또는 디바이스의 제한을 넘은 요구를 했습니다. 이 에러는, 테이프 드라이브가 온라인이 아닌 경우나, 또는 디스크 팩이 드라이브에 로드되어 있지 않은 경우 등 에도 발생할 가능성이 있습니다.

7 E2BIG Arg list too long
    「인수의 리스트가 너무 깁니다」 새로운 프로세스의 인수 리스트와 환경 변수 리스트에 사용된다 바이트수가, 현재의 한계이다 65536 바이트 (<sys/param.h> 안의 NCARGS) (을)를 넘었습니다.

8 ENOEXEC Exec format error
    「실행 형식 에러입니다」 실행이 요구된 파일의 퍼미션은 적절했습니다만, 실행 가능 파일로서 요구되는 형식이 아니었습니다.

9 EBADF Bad file descripter
    「파일 기술자가 불량입니다」 파일 기술자 인수가 범위외에서 만났는지, 열려 있지 않은 파일을 참조하고 있었는지, 또는 기록 (읽기) 전용에 열린 파일에 읽기 (기록) 요구를 했습니다.

10 ECHILD No child processes
    「child process가 없습니다」 wait(2) 또는 waitpid(2) 함수가, child process가 존재하지 않는지, 대기된 적이 없는 child process를 가지지 않는다 프로세스에 의해 실행되었습니다.

11 EDEADLK Resource deadlock avoided
    「리소스 데드 록을 회피했습니다」 데드 록 상황이 될 가능성이 있는 system resource를 잠그려고 했습니다.

12 ENOMEM Cannot allocate memory
    「메모리의 할당을 할 수 없습니다」 새로운 프로세스 이미지가, 하드웨어 또는 시스템이 부과한다 메모리 메니지먼트 제약에 의해 허용 되는 것보다 많은 메모리를 요구했습니다. 스왑 공간의 부족은 통상, 일시적입니다. 그러나, 코어의 부족은 일시적이 아닙니다. 소프트 한계를 대응하는 하드 한계까지 증가시킬 수 있습니다.

13 EACCES Permission denied
    「퍼미션이 거절되었습니다」 파일 액세스 퍼미션으로 금지되고 있는 방법으로 파일에 액세스 하려고 했습니다.

14 EFAULT Bad address
    「부정한 주소입니다」 호출로 건네받은 인수를 사용하려 하고 있을 때, 시스템이 무효인 주소를 검출했습니다.

15 ENOTBLK Not a block device
    「블록 디바이스가 아닙니다」 블록 디바이스 조작이, 비블록 디바이스 또는 파일 에 붙어 시도되었습니다.

16 EBUSY Resource busy
    「리소스가 Busy 상태입니다」 그 시점에서 사용되고 있는 system resource를, 그 요구와 간섭할 방법으로 사용하려고 했습니다.

17 EEXIST File exists
    「파일이 존재합니다」 벌써 존재하는 파일이 부적절한 문맥으로 지정되었습니다. 예를 들어, link(2) 함수에 있어서의 새로운 링크명으로서입니다.

18 EXDEV Improper link
    「부적절한 링크입니다」 다른 파일 시스템상의 파일에의 하드 링크가 시도되었습니다.

19 ENODEV Operation not supported
    「조작이 디바이스에 의해 서포트되고 있지 않습니다」 어느 디바이스에 부적절한 함수를 적용 사용했습니다. 예를 들어, 프린터와 같은 기록 전용 디바이스를 읽어들이려고 했습니다.

20 ENOTDIR Not a directory
    「디렉토리가 아닙니다」 지정의 패스명의 원가요소는 확실히 존재했습니다만, 디렉토리가 요구되고 있는 것에도 불구하고, 그것이 디렉토리가 아니었습니다.

21 EISDIR Is a directory
    「디렉토리입니다」 기록 모드를 지정해 디렉토리를 오픈하려고 했습니다.

22 EINVAL Invalid argument
    「무효인 인수입니다」 무효인 인수가 지정되었습니다 (예를 들어, signal(3) 함수 또는 kill(2) 함수에 미정도리의 시그널을 지정하는 경우).

23 ENFILE Too many open files in system
    「시스템내에서 오픈되고 있는 파일이 너무 많습니다」 시스템이 허용 하는 파일 기술자의 수의 최대수에 도달하고 있어, 적어도 1 개(살)이 클로우즈 될 때까지, 오픈하려고 하는 요구는 채워지지 않습니다.

24 EMFILE Too many open files
    「오픈하고 있는 파일이 너무 많습니다」 <현재의 릴리스에서는, 프로세스 1개에 대해 오픈할 수 있는 파일수의 상한은 64 입니다. > getdtablesize(2) 그리고 현재의 한계를 취득할 수 있습니다.

25 ENOTTY Inappropriate ioctl for device
    「디바이스에 부적절한 ioctl 입니다」 파일 또는 특수 디바이스에 부적절한 조작을 요구하는 제어 함수 ( ioctl(2) (을)를 참조)를 시도했습니다.

26 ETXTBSY Text file busy
    「텍스트 파일이 Busy입니다」 다른 프로세스에 의해 기록용으로 오픈된 순수 프로시쟈 (공유 텍스트) 파일로부터 새로운 프로세스를 만들려고 했는지, 또는 순수 프로시쟈파일이 실행되고 있는 동안에, 기록 액세스를 요구한다 open(2) 호출이 실행되었습니다.

27 EFBIG File too large
    「파일이 너무 큽니다」 파일의 사이즈가 최대치를 초과했습니다 ( 약 2.1E9 바이트).

28 ENOSPC Device out of space
    「디바이스의 빈area 부족합니다」 해당하는 파일 시스템으로 새로운 디스크 블록을 이용할 수 없기 위해(때문에), 통상 파일에의 write(2) 처리, 디렉토리의 작성, 기호 연결의 작성, 디렉토리 엔트리의 작성이 실패했습니다. 또는, 해당하는 파일 시스템으로 새로운 inode 를 이용할 수 없기 위해(때문에), 새롭게 작성하는 파일에 대한다 inode 의 할당이 실패했습니다.

29 ESPIPE Illegal seek
    「부정한 시크입니다」 lseek(2) 함수가 소켓, 파이프, 또는 FIFO 에 대해서 실행되었습니다.

30 EROFS Read-only file system
    「읽기 전용 파일 시스템입니다」 파일 또는 디렉토리를 변경하려고 하는 시도가, 그 시점에서 읽기 전용인 파일 시스템에 대해서 행해졌습니다.

31 EMLINK Too many links
    「링크가 너무 많습니다」 1 개의 파일에 대해 허용 되는 하드 링크의 최대수를 초과했습니다 (1 파일에 대해 하드 링크수의 한계는 32767 입니다).

32 EPIPE Broken pipe
    「파이프가 파괴되고 있었습니다」 데이터를 읽어내는 프로세스가 없다 파이프, 소켓, 또는 FIFO 에 대해서의 기록입니다.

33 EDOM Numerical argument out of domain
    「수치 인수가 area외입니다」 수치 입력 인수가, 수학 함수의 정의역의 외측에 있었습니다.

34 ERANGE Numerical result out of range
    「수치 결과가 범위외입니다」 함수의 수치 결과가 너무 커, 이용할 수 있는 장소에 들어가지 않습니다 (아마 정밀도를 초과했겠지요 ).

35 EAGAIN Resource temporary unavailable
    「리소스를 일시적으로 이용할 수 없습니다」 이것은 일시적인 상황이며, 다음에 같은 routine를 호출했을 때에 정상적으로 완료할 가능성이 있습니다.

36 EINPROGRESS Operation now in progress
    「조작이 현재 진행중입니다」 완료하는데 시간이 걸리는 조작 ( connect(2) 등)을 논브록킹오브제크트에 대해 시도했습니다 ( fcntl(2) (을)를 참조).

37 EALREADY Operation already in progress
    「조작은 이미 진행중입니다」 이미 조작이 진행중의 논브록킹 오브젝트에 대해서 한층 더 조작을 시도했습니다.

38 ENOTSOCK Socket operation on non-socket
    「소켓이 아닌 것에 임해서 소켓 조작을 행했습니다」 여기에 써 있는 대로입니다.

39 EDESTADDRREQ Destination address required
    「행선지 주소가 요구되고 있습니다」 소켓에 관한 조작에 즈음해, 필요한 주소가 빠져 있습니다.

40 EMSGSIZE Message too long
    「메세지가 너무 깁니다」 내부 메세지 버퍼, 또는 어떠한 네트워크상의 제한보다 큰 메세지가 소켓으로 송신되었습니다.

41 EPROTOTYPE Protocol wrong type for socket
    「소켓에 대한 프로토콜의 타입이 잘못되어 있습니다」 요구된 소켓 타입에서는 서포트 되지 않는 프로토콜이 지정되었습니다. 예를 들어, 타입 SOCK_STREAM 그럼, ARPA 인터넷 UDP 프로토콜을 사용할 수 없습니다.

42 ENOPROTOOPT Protocol not available
    「프로토콜을 이용할 수 없습니다」 getsockopt(2) 호출해 또는 setsockopt(2) 호출로, 잘못한 옵션 또는 레벨이 지정되었습니다.

43 EPROTONOSUPPORT Protocol not supported
    「프로토콜이 서포트되고 있지 않습니다」 지정한 프로토콜이 시스템내에 짜넣어지지 않은지, 또는 그 프로토콜의 실장이 존재하지 않습니다.

44 ESOCKTNOSUPPORT Socket type not supported
    「소켓 타입이 서포트되고 있지 않습니다」 지정한 소켓 타입이 시스템내에 짜넣어지지 않은지, 또는 그 소켓 타입의 실장이 존재하지 않습니다.

45 EOPNOTSUPP Operation not supported
    「조작이 서포트되고 있지 않습니다」 인수가 가리키는 오브젝트의 타입은, 지정한 조작을 서포트하고 있지 않습니다. 이 에러가 일어나는 것은, 통상은, 파일 기술자가 이 조작을 서포트할 수 없는 파일 또는 소켓을 참조하고 있을 때입니다. 예를 들어, 데이터 그램 소켓상에서 접속을 accept 사용했을 때입니다.

46 EPFNOSUPPORT Protocol family not supported
    「프로토콜 패밀리가 서포트되고 있지 않습니다」 지정한 프로토콜 패밀리가 시스템에 짜넣어지지 않은지, 또는 그 프로토콜 패밀리의 실장이 존재하고 있지 않습니다.

47 EAFNOSUPPORT Address family not supported by protocol family
    「주소 패밀리가 프로토콜 패밀리에 의해 서포트되고 있지 않습니다」 요구한 프로토콜과 호환성이 없는 주소가 사용되었습니다. 예를 들어, ARPA 인터넷 프로토콜로 NS 주소를 사용할 수 있다고는 반드시 기대해서는 안될 것입니다.

48 EADDRINUSE Address already in use
    「주소가 이미 사용중입니다」 각 주소 마다, 한 번에 1 개(살)만을 이용할 수 있습니다.

49 EADDRNOTAVAIL Cannot assing requested address
    「요구된 주소를 할당하고 할 수 없습니다」 통상은, 이 머신상에 없는 주소로 소켓을 작성하려고 한 결과입니다.

50 ENETDOWN Network is down
    「네트워크가 다운하고 있습니다」 소켓 조작의 결과, 동작하고 있지 않는 네트워크에 조우했습니다.

51 ENETUNREACH Network is unreachable
    「네트워크에 도달할 수 없습니다」 도달할 수 없는 네트워크를 향해 소켓 조작을 시도했습니다.

52 ENETRESET Network dropped connection on reset
    「리셋트에 의해 네트워크의 접속이 없어졌습니다」 접속하고 있던 호스트가 크래쉬 해 재기동되었습니다.

53 ECONNABORTED Software caused connection abort
    「소프트웨어에 의한 접속중단이 생겼습니다」 자머신측의 원인에 의해 접속중단이 발생했습니다.

54 ECONNRESET Connection reset by peer
    「접속이 통신 상대에 의해 리셋트 되었습니다」 접속이 통신 상대 (peer)에 의해 강제적으로 클로우즈 되었습니다. 이것은 타임 아웃 또는 재기동에 의해, 리모트측의 소켓으로 접속이 없어진 결과인 것이 보통입니다.

55 ENOBUFS No buffer space available
    「버퍼의 빈 곳이 없습니다」 시스템에 충분한 버퍼가 없는지, 기다리는 행렬이 가득하게 되었기 때문에, 소켓 또는 파이프에 대한 조작을 하지 않았습니다.

56 EISCONN Socket is already connected
    「소켓은 이미 접속되고 있습니다」 이미 접속된 소켓에 대해서 connect(2) 요구를 행했습니다. 또는, 접속 끝난 소켓에 대한다 sendto(2) (이)나 sendmsg(2) 요구에 즈음해, 이미 접속되고 있는데 행선지를 지정했습니다.

57 ENOTCONN Socket is not connected
    「소켓은 접속되고 있지 않습니다」 소켓이 접속되지 않고, 게다가 (데이터 그램 소켓을 송신할 경우에) 주소가 지정되어 있지 않았기(위해)때문에, 데이터를 송신 또는 수신하는 요구가 허가되지 않았습니다.

58 ESHUTDOWN Cannot send after socket shutdown
    「소켓의 셧다운의 다음에 송신을 할 수 없습니다」 이전에 shutdown(2) (을)를 호출해 이미 셧다운 시켜 버렸기 때문에, 소켓에 대해 데이터를 송신하는 요구가 허가되지 않았습니다.

60 ETIMEDOUT Operation timed out
    「조작이 타임 아웃 했습니다」 어느 시간이 경과하기까지 접속 상대가 적절히 응답하지 않았기(위해)때문에, connect(2) 요구 또는 send(2) 요구의 처리에 실패했습니다 (타임 아웃의 기간은 통신 프로토콜에 좌우됩니다).

61 ECONNREFUSED Connection refused
    「접속이 거절되었습니다」 접속 상대의 머신이 접속을 스스로 거부했으므로, 접속을 확립할 수 없었습니다. 이것은, 통상, 상대 호스트로 유효하지 않은 서비스에 접속하려고 한 결과입니다.

62 ELOOP Too many levels of symbolic links
    「기호 연결의 레벨이 너무 많습니다」 패스명의 탐색에, 32 (MAXSYMLINKS) (을)를 넘는 기호 연결이 포함되어 있었습니다.

63 ENAMETOOLONG File name too long
    「파일명이 너무 깁니다」 패스명의 원가요소가 255 (MAXNAMELEN) 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 (MAXPATHLEN-1) 캐릭터를 넘고 있습니다.

64 EHOSTDOWN Host is down
    「호스트가 다운하고 있습니다」 행선지 호스트가 다운하고 있기 위해서(때문에) 소켓 조작이 실패했습니다.

65 EHOSTUNREACH No route to host
    「호스트에의 경로는 없습니다」 도달 불가능한 호스트에 소켓 조작을 하려고 했습니다.

66 ENOTEMPTY Directory not empty
    「디렉토리가 하늘이 아닙니다」 디렉토리 삭제 또는 이름 변경의 호출에 대해, ‘.’ (와)과 ‘..’ 이외의 엔트리를 포함한 디렉토리가 지정되었습니다.

67 EPROCLIM Too many processes
    「프로세스가 너무 많습니다」

68 EUSERS Too many users
    「유저가 너무 많습니다」 쿼터 시스템이 테이블 엔트리를 다 사용했습니다.

69 EDQUOT Disc quota exceeded
    「디스크 쿼터가 초과했습니다」 유저의 디스크 블록 쿼터를 쓰여졌기 때문에, 통상의 파일에의 write(2) , 디렉토리의 작성, 기호 연결의 작성, 디렉토리 엔트리의 작성이 실패했습니다. 혹은, 유저의 inode 쿼터를 쓰여졌기 때문에, 새롭게 작성된 파일을 위한 inode 의 할당해에 실패했습니다.

70 ESTALE Stale NFS file handle
    「썩어 걸친 NFS 파일 핸들입니다」 오픈되고 있다 ( NFS 파일 시스템상의 ) 파일에 대해서 액세스 하려고 했습니다만, 지정한 파일 기술자가 참조하는 파일은 현재 이용할 수 없습니다. 이것은 NFS 서버상에서 파일이 삭제되었는지, 또는 다른 파멸적인 무엇인가가 일어난 것을 나타내고 있다고 생각됩니다.

72 EBADRPC RPC struct is bad
    「RPC 구조체가 불량입니다」 RPC 정보의 교환이 실패였습니다.

73 ERPCMISMATCH RPC varsion wrong
    「RPC 버젼이 잘못되어 있습니다」 통신 상대의 RPC 의 버젼이, 이쪽의 버젼과 호환성이 없습니다.

74 EPROGUNAVAIL RPC prog.  not avail
    「RPC 프로그램을 이용할 수 없습니다」 요구한 프로그램이 리모트 호스트에 등록되어 있지 않습니다.

75 EPROGMISMATCH Program version wrong
    「프로그램 버젼이 잘못되어 있습니다」 요구한 버젼의 프로그램이, 리모트 호스트 (RPC) 위에서 이용할 수 없습니다.

76 EPROCUNAVAIL Bad procedure for program
    「프로그램에 있어 잘못한 수속입니다」 리모트 프로그램내에 존재하지 않는 수속에 대해 RPC 호출이 시도되었습니다.

77 ENOLCK No locks available
    「락을 이용할 수 없습니다」 시스템이 부과한, 동시 파일 락수의 제한에 이르렀습니다.

78 ENOSYS Function not implemented
    「함수가 실장되고 있지 않습니다」 이 시스템으로 이용할 수 없는 시스템 콜을 실행하려고 했습니다.

79 EFTYPE Inappropriate file type or format
    「파일의 형태 또는 형식이 부적절합니다」 조작이 잘못한 형태의 파일에 행해졌는지, 또는 데이터 파일의 형식이 잘못하고 있습니다.

80 EAUTH Authentication error
    「인증 에러입니다」 NFS 파일 시스템을 mount 하기 위해서 부정한 인증 티켓을 사용하려고 했습니다.

81 ENEEDAUTH Need authenticator
    「인증물이 필요합니다」 지정했다 NFS 파일 시스템을 mount 하기 위해서 인증 티켓이 필요합니다.

82 EIDRM Identifier removed
    「식별자는 삭제되었습니다」 IPC 의 식별자는, 현재의 프로세스가 그래서 기다리고 있는 동안에 삭제되었습니다.

83 ENOMSG No message of desired type
    「요구된 형태의 메세지가 없습니다」 요구한 형태의 메세지가 IPC 메시지 큐에 없습니다. 또는, 메세지 카탈로그는 요구한 메세지를 포함하고 있지 않습니다.

84 EOVERFLOW Value too large to be stored in data type
    「데이터 타입에 격납하기에는 너무 큰 값입니다」 함수로부터의 수치의 반환값이, 호출측에서 준비한 장소에 격납하기에는 너무 큽니다.

85 ECANCELED Operation canceled
    「처리는 캔슬되었습니다」 예정되어 있던 처리는 캔슬되었습니다.

86 EILSEQ Illegal byte sequence
    「부정한 바이트열입니다」 다바이트 캐릭터를 디코드하고 있을 때에, 함수는 부정 또는 불완전한 아르바이트열 혹은 부정한 와이드 캐릭터에 조우했습니다.

정의

프로세스 ID (Process ID)
    시스템내의 액티브한 각 프로세스는, 프로세스 ID (으)로 불리는 부가 아닌 정수에 의해 일의에 식별됩니다. 이 ID 의 범위는 0 에서 99999 까지입니다.

parent process ID (Parent process ID)
    새로운 프로세스는, 현재의 액티브한 프로세스로부터 작성됩니다 ( fork(2) (을)를 참조). 프로세스의 parent process ID 는, 처음은 그것을 작성한 프로세스의 프로세스 ID 가 되고 있습니다. 그 프로세스를 작성한 프로세스가 exit 했을 경우, 각각의 child process의 parent process ID 는, 시스템 프로세스 init(8) 의 ID 로 설정됩니다.

프로세스 그룹 (Process Group)
    액티브한 프로세스는 각각이 있는 프로세스 그룹의 멤버이며, 프로세스 그룹은 프로세스 그룹 ID 로 불린다 부가 아닌 정수에 의해 식별됩니다. 프로세스 그룹 ID 는 그 그룹의 리더의 프로세스 ID 입니다. 이 그룹화에 의해, 관련 지을 수 있었던 프로세스의 집단에 시그널을 보낸다 ( termios(4) (을)를 참조) 일이나, csh(1) 의 작업 제어 기구를 가능하게 합니다.

세션 (Session)
    세션은 1 개 이상의 프로세스 그룹의 집합입니다. 세션은 setsid(2) 의 호출이 성공하면(자) 작성됩니다. 이것에 의해, 호출한 프로세스는, 신규의 세션이 1 개(살)만 가지는 프로세스 그룹의 유일한 멤버가 됩니다.

세션 리더 (Session leader)
    setsid(2) 의 호출의 성공에 의해, 새로운 세션을 작성한 프로세스는, 세션 리더로서 알려집니다. 단말을 자신이 제어하는 단말 ( termios(4) (을)를 참조)로서 취득할 수 있는 것은, 세션 리더 뿐입니다.

제어 프로세스 (Controlling process)
    제어 단말을 가지는 세션 리더가 제어 프로세스입니다.

제어 단말 (Controlling terminal)
    세션에 관련 지을 수 있고 있는 단말은, 그 세션과 그 멤버에 대한다 제어 단말로서 알려집니다.

단말 프로세스 그룹 ID (Terminal Process Group ID)
    단말은, 세션 리더에 의해 제어 단말로서 취득됩니다. 한번 단말이 세션에 관련 지을 수 있으면(자), 단말 프로세스 그룹 ID 를 프로세스 그룹의 ID 로 설정하는 것에 의해, 그 세션내의 어느 프로세스 그룹에서도, foreground에 둘 수가 있게 됩니다. 이 기능은, 같은 단말을 둘러싸 경합 하고 있는 복수의 작업의 사이에 조정을 행하기 위해서(때문에) 이용됩니다 ( csh(1) (와)과 tty(4) (을)를 참조).

고아 프로세스 그룹 (Orphaned Process Group)
    프로세스 그룹은, 작업 제어를 행하는 쉘의 제어하에 없는 경우, 고아가 되었다 (으)로 간주해집니다. 보다 정확하게 말하면(자), 그 프로세스 그룹의 멤버는 모두, 그 그룹과 같은 세션에 속하는 parent process를 가지지 않고, 한편, parent process가 다른 프로세스 그룹에 속하는 경우, 그 프로세스 그룹은 고아가 됩니다. 덧붙여 프로세스가 종료할 때, 그 child process의 parent process는 init(8) 되도록(듯이) 변경됩니다. 그리고 이것은 별개의 세션이 됩니다. 고아가 된 프로세스 그룹의 멤버의 모두가, 반드시 고아가 된 프로세스 (프로세스를 작성한 프로세스가 종료했다) 그렇다고 하는 것은 아닙니다. 이 정의에 의해, 세션 리더의 프로세스 그룹은 고아가 됩니다.

열매 유저 ID 와 열매 그룹 ID (Real User ID and Real Group ID)
    시스템상의 각 유저는, 열매 유저 ID 로 불린다 정의 정수에 의해 식별됩니다.

    각 유저는, 1 개(살) 또는 복수의 그룹의 멤버이기도 합니다. 이러한 그룹의 1 개는 다른 것으로부터 구별되어 어카운팅 기능을 실현하는데 사용됩니다. 이 구별된 그룹에 대응하는 정의 정수는, 열매 그룹 ID 와 불립니다.

    모든 프로세스는 열매 유저 ID 와 열매 그룹 ID 를 가지고 있습니다. 이것들은, 그 프로세스를 작성한 프로세스와 등가인 속성치를 사용해 초기화됩니다.

실효 유저 ID, 실효 그룹 ID, 그룹 액세스 리스트 (Effective User Id, Effective Group Id, and Group Access List)
    system resource에의 액세스는, 실효 유저 ID 와 그룹 액세스 리스트라고 한다 2 개의 값을 사용해 결정됩니다. 그룹 액세스 리스트의 최초의 멤버는, 실효 그룹 ID (으)로서도 알려져 있습니다 (POSIX. 1 에서는, 그룹 액세스 리스트는, 보조 그룹 ID 의 세트로서 알려져 실효 그룹 ID 가 리스트의 멤버로 어느 미규정입니다).

    실효 유저 ID 와 실효 그룹 ID 는, 처음은 각각, 프로세스의 열매 유저 ID 와 열매 그룹 ID 입니다. 모두 (아마 그 선조중 한쪽이) set-user-ID 파일 또는 set-group-ID 파일을 실행하는 것으로써 변경할 수가 있습니다 ( execve(2) (을)를 참조해 주세요). 관습으로, 실효 그룹 ID (그룹 액세스 리스트의 최초의 멤버)(은)는 복제되므로, set-group-ID 프로그램의 실행의 결과, 원래 가지고 있었다 (열매) 그룹 ID 가 없어질 것은 없습니다.

    그룹 액세스 리스트는, 리소스에의 액세스가 가능한지 어떤지를 결정한다 위해(때문에)만 사용되는 그룹 ID 의 집합입니다. 액세스 체크는, 이후의 ``파일 액세스 퍼미션'' 그리고 설명하도록(듯이) 행해집니다.

보존된 세트 유저 ID 와 보존된 세트 그룹 ID (Saved Set User ID and Saved Set Group ID)
    프로세스가 새로운 파일을 실행할 때, 파일이 set-user-ID 이면, 실효 유저 ID 는 그 파일의 소유자로 설정되어 파일이 set-group-ID 이면, 실효 그룹 ID (그룹 액세스 리스트의 최초의 요소)는 파일의 그룹으로 설정됩니다. 그리고 프로세스의 실효 유저 ID 는 saved set-user-ID 로서 기록되어 프로세스의 실효 유저 ID 는 saved set-group-ID 로서 기록됩니다. 이러한 기록된 값은, 열매 ID ( setuid(2) (을)를 참조)에 돌아온 다음에, 실효 유저 ID 또는 실효 그룹 ID 를 이러한 값에 회복하기 위해서 이용할 수 있습니다. (POSIX. 1 에서는 saved set-user-ID 와 saved set-group-ID 는 옵션이며, setuid 및 setgid 의 내부에서 사용됩니다만, 이것은 슈퍼 유저에 대해 의도대로는 기능하지 않습니다).

슈퍼 유저 (super-user)
    실효 유저 ID 가 0 의 경우, 그 프로세스는 슈퍼 유저 프로세스로서 인식되어 특별한 권리가 인정됩니다.

특수 프로세스 (Special Processes)
    프로세스 ID 가 0, 1, 2 의 프로세스는 특수합니다. 프로세스 0 은 스케쥴러입니다. 프로세스 1 은 초기화 프로세스 init(8) (이어)여, 시스템내의 다른 각 프로세스의 조상입니다. 이것은 프로세스 구조를 제어하기 위해서 사용됩니다. 프로세스 2 는 페이징 demon입니다.

기술자 (Descriptor)
    open(2), dup(2) 에 의해 파일이 참조될 때, 또는 pipe(2), socket(2), socketpair(2) 에 의해 소켓이 작성될 때 시스템에 의해 할당할 수 있는 정수입니다. 이 정수는, 지정의 프로세스나 그 child process로부터, 그 파일이나 소켓에의 액세스 패스를 일의에 식별합니다.

파일명 (File Name)
    최고 255 (MAXNAMELEN) 캐릭터로부터 되는 이름이며, 통상 파일, 특수 파일, 디렉토리에 이름을 붙이는데 사용됩니다.

    이러한 캐릭터는, 0 (NUL) 및 ‘/’ (slash)의 ASCII 코드를 제외해 모든 ASCII 캐릭터의 집합으로부터 선택할 수 있습니다.

    덧붙여 일반적으로, 파일명의 일부로서 ‘*’, ‘’?, ‘[’, ‘’] (을)를 사용하는 것은 현명하지는 않습니다. 쉘에 의해 이러한 캐릭터에는 특수한 의미가 붙여지기 때문입니다.

패스명 (Path Name)
    패스명은, NUL 그리고 종단 된 캐릭터 라인입니다. slash ‘/’ (생략 가능)(으)로 시작되어, slash로 단락지어진 제로개이상의 디렉토리명이 계속되어, 파일명 (생략 가능)이 계속됩니다. 패스명의 길이의 합계는 1024 (MAXPATHLEN) 캐릭터 미만일 필요가 있습니다.

    패스명이 slash로 시작되는 경우, 패스 검색은 루트 디렉토리로부터 개시합니다. 그렇지 않은 경우, 검색은 현재의 작업 디렉토리로부터 개시합니다. slash만의 경우, 루트 디렉토리를 지정합니다. 하늘의 패스명은 현재의 디렉토리를 가리킵니다.

디렉토리 (Directory)
    디렉토리는 특수한 타입의 파일이며, 다른 파일을 참조한다 엔트리를 포함하고 있습니다. 디렉토리 엔트리를 링크라고 부릅니다. 전통적으로, 디렉토리에는 적어도 2 살의 링크, ‘.’ (와)과 ‘..’ (을)를 포함합니다. 이것들은 각각 닷 및 닷-닷 (으)로 불립니다. 닷은, 그 디렉토리 자체를 가리켜, 닷-닷은 그 친디렉토리를 가리킵니다.

루트 디렉토리와 현재의 작업 디렉토리 (Root Directory and Current Working Directory)
    각 프로세스는, 루트 디렉토리와 현재의 작업 디렉토리라고 한다 개념을 가진다고 여겨져 왔습니다. 이러한 개념은 패스명 검색을 해결할 때에 이용됩니다. 프로세스의 루트 디렉토리는, 루트 파일 시스템의 루트 디렉토리일 필요는 없습니다.

파일 액세스 퍼미션 (File Access Permission)
    파일 시스템내의 각 파일은 액세스 퍼미션의 집합을 가지고 있습니다. 이러한 퍼미션은, 프로세스가 파일에 대해 요구된 조작 (예를 들어, 기록용으로 파일을 오픈한다) (을)를 행해도 괜찮은지 어떤지를 판정하는데 사용됩니다. 액세스 퍼미션은 파일이 작성되었을 때에 설정됩니다. 액세스 퍼미션은 chmod(2) 호출을 이용해 나중에 변경할 수도 있습니다.

    파일 액세스에서는, 파일이 읽기가 용서되고 있는지 어떤지, 기록이 용서되고 있는지 어떤지, 실행이 용서되고 있는지 어떤지, 에 의해 분류됩니다. 디렉토리 파일에서는, 디렉토리를 검색해도 괜찮은지 어떤지를 제어하는데 실행 퍼미션을 사용합니다.

    시스템이 파일 액세스 퍼미션을 해석하는 것에 즈음해, 유저의 3 개가 다른 클래스 (파일의 소유자, 파일의 그룹내의 유저, 그 외)의 어느 것으로 적용할까에 의해 해석합니다. 각 파일은, 이러한 각 클래스에 도착해, 독립한 액세스 퍼미션의 집합을 가지고 있습니다. 액세스 체크가 행해지면(자), 시스템은, 호출 측에 적용할 수 있는 액세스 정보를 체크하는 것에 의해, 퍼미션이 인가되는지 어떤지를 판정합니다.

    파일에 대한 읽기, 기록, 실행/검색의 각 퍼미션은, 다음의 경우에 프로세스에 인가됩니다.

    프로세스의 실효 유저 ID 가 슈퍼 유저인 경우 (주: 슈퍼 유저여도, 실행 가능하지 않은 파일을 실행한다 (일)것은 할 수 없습니다).

    프로세스의 실효 유저 ID 가 파일의 소유자의 유저 ID 에 일치해, 소유자의 퍼미션이 액세스를 허가하고 있는 경우.

    프로세스의 실효 유저 ID 가 파일의 소유자의 유저 ID (와)과 일치하지 않고 , 프로세스의 실효 그룹 ID 가 파일의 그룹 ID (와)과 일치하든가 또는 파일의 그룹 ID 가 프로세스의 그룹 액세스 리스트내에 있을까의 어느 쪽인지여, 그룹 퍼미션이 액세스를 허용 하고 있는 경우.

    프로세스의 실효 유저 ID 도 실효 그룹 ID 도 그룹 액세스 리스트도, 파일의 대응하는 유저 ID 및 그룹 ID 와 일치하지 않지만,``그 외의 유저''의 퍼미션이 액세스를 허용 하는 경우.

    상기의 어느 것에도 해당하지 않는 경우, 퍼미션은 거절됩니다.

소켓과 주소 패밀리 (Sockets and Address Families)
    소켓은 프로세스간의 통신의 단 점입니다. 각 소켓에는, 데이터 송신용 및 수신용의 기다리는 행렬이 있습니다.

    소켓에는, 통신의 성질에 의한 타입이 있습니다. 이러한 성질에는, 소켓으로 송수신 되는 메세지에 상대의 이름이 필요한지 어떤지, 통신에 신뢰성이 있는지 어떤지, 메세지 수신자를 이름 붙일 때에 사용되는 형식등이 포함됩니다.

    실제의 시스템은 각각, 몇개의 소켓 타입의 집합을 서포트하고 있습니다. 이용할 수 있는 타입 및 그러한 프로퍼티의 상세한 것에 대하여는, socket(2) (을)를 참조해 주세요.

    실제의 시스템은 각각, 몇개의 통신 프로토콜의 집합을 서포트하고 있습니다. 프로토콜의 집합은 각각 어느 특정의 형식의 주소를 서포트합니다. 주소 패밀리는, 어느 프로토콜의 그룹에 대응하는 주소의 집합입니다. 소켓은 각각, 소켓이 작성된 주소 패밀리로부터 선택한 주소를 가집니다.

관련 항목
intro(3), perror(3)