codecamp

POSIX

POSIX简介

POSIX(Portable Operation System Interface)听起来好高端,就是一种操作系统的接口标准,至于谁遵循这个标准呢?就是大名鼎鼎的Unix和Linux了,有人问Mac OS是否兼容POSIX呢,答案是Yes苹果的操作系统也是Unix-based的。

有了这个规范,你就可以调用通用的API了,Linux提供的POSIX系统调用在Unix上也能执行,因此学习Linux的底层接口最好就是理解POSIX标准。

补充一句,目前很多编程语言(Go、Java、Python、Ruby等)都是天生跨平台的,因此我们很少注意系统调用的兼容性。实际上POSIX提供了这些语言上跨平台的语义,而且这是源码级别的保证。

POSIX规范

POSIX是一些IEEE标准,包括1003.0、1003.1、1003.1b和2003等,实际上连Linux也没有完全兼容这些定义,不过只用Linux来学习POSIX足够了。

鉴于绝大多数程序员都没看过IEEE文档,我们就翻一下IEEE 1003.1-2001吧。

篇幅跟论文差不多,大意就是修正Base标准存在的问题,这个文档没有增加新的接口,但是加了符号、非函数的定义和保留更多命名空间。这是非常严谨的文档,感兴趣的同学可以读下,对普通的程序员我们还是建议了解以下的内容。

POSIX进程

我们运行Hello World程序时,操作系统通过POSIX定义的forkexec接口创建起一个POSIX进程,这个进程就可以使用通用的IPC、信号等机制。

POSIX线程

POSIX也定义了线程的标准,包括创建和控制线程的API,在Pthreads库中实现,有关线程的知识有机会再深入学习。

活锁
Nohup
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

项目实例Run

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }