POSIX 7이 정의하는 가장 중요한 것
C API
다음 과 같이 ANSI C 를 크게 확장합니다 .
- 더 많은 파일 작업 :
mkdir
, dirname
, symlink
, readlink
, link
(하드 링크), poll()
, stat
, sync
,nftw()
- 프로세스 및 스레드 :
fork
, execl
, wait
, pipe
, semaphors sem_*
, 공유 메모리 ( shm_*
) kill
, 스케줄링 매개 변수 ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- 네트워킹 :
socket()
- 메모리 관리 :
mmap
, mlock
, mprotect
, madvise
,brk()
- 유틸리티 : 정규식 (
reg*
)
이러한 API는 또한 의존하는 기본 시스템 개념을 결정 fork
합니다 ( 예 : 프로세스 개념 필요).
대부분의 리눅스 시스템 호출 예를 들어, 특정 POSIX C API 함수를 구현하고 리눅스를 준수하기 위해 존재한다 sys_write
, sys_read
... 그 콜의 대부분은 그러나 리눅스 특정 확장자를 가지고있다.
주요 Linux 데스크탑 구현 : glibc. 많은 경우 시스템 호출에 얕은 래퍼를 제공합니다.
CLI 유틸리티
예 : cd
, ls
, echo
, ...
많은 유틸리티는 해당 C API 함수에 대한 직접 쉘 프론트 엔드입니다 (예 :) mkdir
.
주요 리눅스 데스크톱 구현 : 작은 사람을위한 GNU로 coreutils, 큰 사람을위한 별도의 GNU 프로젝트 : sed
, grep
, awk
, ... 일부 CLI 유틸리티가 강타에 의해 구현되는 기본 기능으로 .
쉘 언어
예 : a=b; echo "$a"
주요 리눅스 데스크톱 구현 : GNU 배쉬 .
환경 변수
예 : HOME
, PATH
.
PATH
슬래시가 PATH
검색을 방지하는 방법을 포함하여 검색 의미가 지정됩니다 .
프로그램 종료 상태
ANSI C는 성공 0
또는 실패, 나머지 구현을 정의한 상태로 둡니다.EXIT_SUCCESS
EXIT_FAILURE
POSIX는 다음을 추가합니다.
정규식
BRE (기본) 및 ERE (확장)의 두 가지 유형이 있습니다. 기본은 더 이상 사용되지 않으며 API를 중단하지 않도록 유지되었습니다.
이들은 C API 함수로 구현되며 CLI 유틸리티 전체에서 사용됩니다. 예를 들어 grep
기본적으로 BRE를 허용하고 ERE를 사용 -E
합니다.
예 : echo 'a.1' | grep -E 'a.[[:digit:]]'
주요 Linux 구현 : glibc는 regex.hgrep
에서 백엔드로 사용할 수 있는 프로그램을 구현합니다 .
디렉토리 구조
예 : /dev/null
,/tmp
Linux FHS는 POSIX를 크게 확장합니다.
파일명
/
경로 구분자
NUL
쓸 수 없다
.
이다 cwd
, ..
부모
- 휴대용 파일 이름
- 전체 경로에 최대 14 자, 256자를 사용하십시오.
- 다음을 포함 할 수 있습니다 :
a-zA-Z0-9._-
참조 : https : //.com/questions/18550253/what-is-posix-compliance-for-filesystem
명령 행 유틸리티 API 규칙
POSIX에서 사용하는 필수 사항은 아니지만 GNU에서는 거의 없습니다. 그러나 사실, 너무 제한적입니다 (예 : 단일 문자 플래그 만 (예 -a
:), 이중 하이픈 긴 버전 (예 :) 없음 --all
).
널리 사용되는 몇 가지 규칙 :
-
파일이 예상되는 stdin을 의미
--
플래그를 종료합니다. 예 ls -- -l
를 들어 이름이 지정된 디렉토리를 나열합니다.-l
참조 : https : //.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
에 대한 백엔드로 사용 "POSIX ACL은"(액세스 제어 목록), 예 setfacl
.
이것은 철회 되었지만 Linux를setxattr
포함하여 여러 OS에서 구현되었습니다 .
POSIX는 누가 준수합니까?
많은 시스템이 POSIX를 엄격하게 따르지만 실제로 표준을 유지하는 Open Group에서 인증 한 시스템은 거의 없습니다. 주목할만한 인증 된 것들 :
대부분의 Linux 배포판은 규정을 준수하지만 규정 준수 검사 비용을 지불하지 않기 때문에 인증되지 않았습니다. Inspur의 K-UX 와 Huawei의 EulerOS 는 인증 된 두 가지 예입니다.
인증 된 시스템의 공식 목록은 https://www.opengroup.org/openbrand/register/ 및 위키 페이지에서 확인할 수 있습니다.
윈도우
Windows는 일부 전문 배포판에 POSIX를 구현했습니다.
이 기능은 옵션 기능이므로 프로그래머는 대부분의 최종 사용자 응용 프로그램에이 기능을 사용할 수 없습니다.
Windows 8에서는 지원이 더 이상 사용되지 않습니다.
2016 년에는 "Linux 용 Windows 하위 시스템"이라는 새로운 공식 Linux 유사 API가 발표되었습니다. 그것은 리눅스 시스템 호출, ELF 실행,의 부품이 포함되어 /proc
파일 시스템을, 강타, GCC는 (? TODO 가능성이 glibc가), apt-get
및 더 많은 : https://channel9.msdn.com/Events/Build/2016/P488을 나는 믿습니다 있도록 Windows가 POSIX를 전부 또는 전부 실행하지 못하게합니다. 그러나 최종 사용자 대신 개발자 / 배포에 중점을 둡니다. 특히 Windows GUI에 대한 액세스를 허용 할 계획이 없었습니다.
공식 Microsoft POSIX 호환성에 대한 과거 개요 : http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin 은 Windows에 "실제 POSIX API 기능을 제공"하는 "GPL 타사 프로젝트"로 잘 알려져 있지만 "Windows에서 실행하려면 소스에서 응용 프로그램을 다시 작성해야합니다". MSYS2 는 Cygwin 위에 더 많은 기능을 추가하는 것으로 보이는 관련 프로젝트입니다.
기계적 인조 인간
Android에는 Android O 기준으로 POSIX를 완전히 지원하지 않는 자체 C 라이브러리 (Bionic)가 있습니다. https://stackoverflow.com/questions/27604455/is-android-posix-compatible
보너스 레벨
리눅스 표준 자료는 더 POSIX를 확장합니다.
비 프레임 색인을 사용하면 훨씬 더 읽기 쉽고 검색 할 수 있습니다. http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
grepping을 위해 HTML 페이지의 전체 압축 버전을 받으십시오. https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939