POSIX 란 무엇입니까? 나는 Wikipedia 기사 를 읽었으며 용어가 나올 때마다 읽었습니다. 사실 나는 그것이 무엇인지 정말로 이해하지 못한다는 것입니다.
"POSIX의 필요성"도 설명해 주시겠습니까?
POSIX 란 무엇입니까? 나는 Wikipedia 기사 를 읽었으며 용어가 나올 때마다 읽었습니다. 사실 나는 그것이 무엇인지 정말로 이해하지 못한다는 것입니다.
"POSIX의 필요성"도 설명해 주시겠습니까?
답변:
POSIX 는 Unix-y 운영 체제에서 제공하는 응용 프로그램 프로그래밍 인터페이스 (및 명령 줄 셸 유틸리티와 같은 보조 문제)를 명확하고 균일하게 만들기 위해 IEEE 에서 지정한 표준 제품군입니다 . POSIX 표준에 의존하도록 프로그램을 작성할 때, Linux를 포함하여 대규모 유닉스 파생물 (Linux를 포함하지만 이에 국한되지 않음)간에 쉽게 이식 할 수 있습니다. Posix의 일부로 표준화되지 않은 Linux API를 사용하는 경우 나중에 해당 프로그램이나 라이브러리를 다른 Unix-y 시스템 (예 : MacOSX)으로 이식하려는 경우 시간이 더 어려워집니다.
Microsoft's market share on desktops, at least, makes it "what the world follows"
-2009 년 이후이 의견 이후로 많은 변화가
POSIX 7이 정의 하는 가장 중요한 것
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. 많은 경우 시스템 호출에 얕은 래퍼를 제공합니다.
예 : 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는 다음을 추가합니다.
126
: 명령을 찾았지만 실행할 수 없습니다.
127
: 명령어를 찾을수 없음.
> 128
: 신호에 의해 종료됩니다.
그러나 POSIX는 128 + SIGNAL_ID
Bash가 사용 하는 규칙 을 지정하지 않는 것 같습니다 : /unix/99112/default-exit-code-when-process-is-terminated
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
, ..
부모a-zA-Z0-9._-
POSIX에서 사용하는 필수 사항은 아니지만 GNU에서는 그렇지 않습니다. 그러나 사실, 너무 제한적입니다 (예 : 단일 문자 플래그 만 (예 -a
:), 이중 하이픈 긴 버전 (예 :) 없음 --all
).
널리 사용되는 몇 가지 규칙 :
-
파일이 예상되는 stdin을 의미--
플래그를 종료합니다. 예 ls -- -l
를 들어 이름이 지정된 디렉토리를 나열합니다.-l
"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) 가 있습니다. Android POSIX와 호환됩니까?
보너스 레벨
리눅스 표준 자료는 더 POSIX를 확장합니다.
비 프레임 색인을 사용하면 훨씬 더 읽기 쉽고 검색 할 수 있습니다. http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
grepping을 위해 HTML 페이지의 전체 압축 버전을 받으십시오. POSIX C API 함수 목록은 어디에 있습니까?
POSIX 는 :
POSIX (/ ˈpɒzɪks /로 발음) 또는 "휴대용 운영 체제 인터페이스 [유닉스 용]" 1 은 소프트웨어 용 쉘 및 유틸리티 인터페이스와 함께 응용 프로그래밍 인터페이스 (API)를 정의하기 위해 IEEE에서 지정한 관련 표준 제품군의 이름입니다. 표준은 모든 운영 체제에 적용될 수 있지만 Unix 운영 체제의 변형과 호환됩니다.
기본적으로 (대부분의) 공통 API와 유틸리티를 사용하여 다양한 UNIX 버전의 개발 및 사용의 어려움을 완화시키는 일련의 조치였습니다. 제한된 POSIX 준수도 다양한 버전의 Windows로 확장되었습니다.
난처한 "비공식적 인"설명을 드리겠습니다.
POSIX는 "UNIX"및 UNIX 유사 시스템과 호환되지 않는 시스템을 구별하려고 시도하는 표준 세트입니다. 미국 정부가 조달 목적으로 작성했습니다. 이 아이디어는 미국 연방의 조달 부서에서 기존의 코드 기반 또는 프로그래밍 직원이 이식 할 수없는 시스템을 제외하는 데 사용할 수있는 방식으로 다양한 종류의 입찰 및 계약에 대한 요구 사항을 법적으로 지정하는 방법이 필요하다는 것이 었습니다.
POSIX는 사실상 유사한 경쟁 시스템 세트를 설명하기 위해 사실상 사후에 작성되었으므로 구현 가능한 방식으로 작성되지 않았습니다.
예를 들어, POSIX 하위 시스템은 실질적인 이식성과 UNIX 시스템과의 호환성 측면에서 본질적으로 쓸모가 없지만 Microsoft NT는 일부 입찰에 적합한 POSIX 규격을 준수하여 작성되었습니다.
유닉스에 대한 다양한 표준이 수십 년 동안 작성되었습니다. SPEC1170 (호환 적으로 구현되어야하는 1,170 개의 함수 호출 지정) 및 SUS (Single UNIX Specification)의 다양한 구현이 있습니다.
대부분의 경우 이러한 "표준"은 실제 기술 적용에 적합하지 않습니다. 그것들은 대부분 논쟁, 법적인 논쟁 및 기타 역기능상의 이유로 존재합니다.
POSIX는 크로스 플랫폼 소프트웨어를보다 쉽게 작성할 수 있도록하는 운영 체제의 표준입니다. 유닉스 세계에서 특히 큰 문제입니다.
POSIX는 IEEE와 Open Group이 제시 한 일련의 표준으로 이상적인 Unix의 작동 방식을 설명합니다. 프로그래머, 사용자 및 관리자는 모두 POSIX 문서에 익숙해 질 수 있으며 POSIX 호환 Unix가 언급 된 모든 표준 기능을 제공 할 것으로 기대합니다.
모든 Unix는 Solaris, Mac OS X, IRIX, BSD 및 Linux에서 약간 씩 다른 작업을 수행하므로 POSIX는 표준 환경을 정의 할 때 산업계에 특히 유용합니다. 예를 들어, C 라이브러리의 대부분의 함수는 POSIX를 기반으로합니다. 따라서 프로그래머는 자신의 응용 프로그램에서 하나를 사용할 수 있으며 대부분의 Unices에서 동일하게 작동 할 것으로 기대할 수 있습니다.
그러나 유닉스의 다양한 영역은 일반적으로 표준 영역보다는 초점입니다.
POSIX의 가장 큰 장점은 직접 읽을 수 있다는 것입니다.
이슈 7은 POSIX.1-2008로 알려져 있으며 새로운 사항이 있지만 POSIX.1에 대한 Google-fu는 Unix의 전체 역사를 볼 수 있습니다.
1985 년에 컴퓨터 업계의 여러 회사에서 개인이 합쳐 POSI (Portable Operating System Interface for Computer Environments) 표준을 개발했습니다.이 표준은 주로 SVID (UNIX System V Interface Definition) 및 기타 초기 표준화 노력을 기반으로합니다. 이러한 노력은 교육 및 조달 비용을 최소화하기 위해 표준 컴퓨팅 환경이 필요한 미국 정부에 의해 촉진되었습니다. 1988 년에 출시 된 POSIX는 운영 체제의 API, 셸 및 유틸리티 인터페이스를 정의하는 IEEE 표준 그룹입니다. UNIX와 유사한 시스템을 목표로하지만 표준은 호환되는 모든 운영 체제에 적용될 수 있습니다. 이제 이러한 표준이 수용되었으므로 소프트웨어 개발자는 모든 호환 버전의 UNIX, Linux에서 실행되는 응용 프로그램을 개발할 수 있습니다.
책에서 : 리눅스에 대한 실용 가이드
Posix는 OS가 아니라 "OS 표준"입니다. 실제로 존재하지 않지만 문서가있는 가상 OS로 상상할 수 있습니다. 이 논문은 미국에서 가장 큰 표준 조직인 IEEE에 의해 정의 된 "posix 표준"입니다. 이 사양을 구현하는 OS는 "Posix 호환"입니다.
정부 규정은 투자에 Posix 호환 솔루션을 선호하므로 Posix 호환은 특히 미국의 대기업 IT에게 상당한 재정적 이점이 있습니다.
완전히 posix를 준수하는 OS에 대한 보상은 모든 Posix 호환 응용 프로그램을 완벽하게 컴파일하고 실행한다는 보장입니다.
리눅스가 가장 잘 알려져 있습니다. OSX, Solaris, NetBSD 및 Windows NT도 여기에서 재생됩니다. Free 및 OpenBSD는 "거의"Posix 호환입니다. WinNT의 posix-compliance는 위의 정부 규정을 피하기위한 의사 솔루션 일뿐입니다.
POSIX는 휴대용 운영 체제 인터페이스를 나타내며 응용 프로그램 이식성을 용이하게하도록 설계된 IEEE 표준입니다. POSIX는 공급 업체 컨소시엄이 단일 표준 버전의 UNIX를 만들려고 시도합니다.
Posix는 상호 운용성, 이식성 및 포크의 사용 및 메커니즘, 권한 및 파일 시스템 표준 (예 : / etc, / var, / usr 등) 과 같은 기타 영역을 관리합니다 . 합니다. 따라서 개발자가 Linux와 같은 Posix 호환 시스템에서 프로그램을 작성할 때 일반적으로 항상 IBM의 AIX 시스템 또는 다른 상용 Unix 변종과 같은 다른 posix 호환 시스템에서 실행되는 것은 아닙니다. Posix는 소프트웨어 개발을 용이하게하기 위해 노력하는 것이 가장 좋습니다. 이 답변이 의미가 있기를 바랍니다.
내 잘못을 지적 해 준 Jed Smith & Tinkertim에게 감사합니다. :(
POSIX에 관한 몇 가지 사실은 그렇게 밝지 않습니다.
POSIX는 또한 시스템 호출 인터페이스 또는 API이며 거의 30 년이되었습니다.
단일 CPU가있는 단일 컴퓨터를 사용하여 로컬 스토리지에 대한 직렬화 된 데이터 액세스를 위해 설계되었습니다 .
POSIX에서 보안은 설계 상 주요 관심사가 아니 었으며 수년에 걸쳐 수많은 경쟁 조건 공격이 발생했으며 프로그래머는 이러한 한계를 극복해야했습니다.
보다 안전한 POSIX API 디자인으로 피할 수있는 심각한 버그가 여전히 발견되고 있습니다.
POSIX는 사용자가 한 번에 하나의 동기 호출을 발행하고 그 결과를 기다렸다가 다음을 발행 할 것을 기대합니다. 오늘날의 프로그래머는 전체 처리량을 개선하기 위해 한 번에 많은 비동기 요청을 발행 할 것으로 예상합니다.
이 동기 API는 대기 시간이 긴 원격 및 클라우드 객체에 액세스하는 데 특히 나쁩니다.