從零開(kāi)始UNIX環(huán)境高級(jí)編程(2):Unix標(biāo)準(zhǔn)及實(shí)現(xiàn)

0. 思維導(dǎo)圖

Unix標(biāo)準(zhǔn)及實(shí)現(xiàn)

1. Unix標(biāo)準(zhǔn)化

1.1 ISO C

目的

提供C程序的可移植性,使其能適合于不同的操作系統(tǒng)

工作組

ISO/IEC JTC1/SC22/WG14

版本

ISO/C 版本

定義內(nèi)容

It specifies
— the representation of C programs;
— the syntax and constraints of the C language;
— the semantic rules for interpreting C programs;
— the representation of input data to be processed by C programs;
— the representation of output data produced by C programs;
— the restrictions and limits imposed by a conforming implementation of C.

1.2 IEEE POSIX

目的

提升應(yīng)用程序在各種Unix系統(tǒng)環(huán)境之間的可移植性

版本

  • Parts before 1997
    POSIX.1: Core Services
    POSIX.1b: Real-time extensions
    POSIX.1c: Threads extensions
    POSIX.2: Shell and Utilities
  • Versions after 1997
    POSIX.1-2001
    POSIX.1-2004 (with two TCs)
    POSIX.1-2008 (with one TC)

工作組

IEEE 1003.1

定義內(nèi)容

  • General terms, concepts, and interfaces common to all volumes of this standard, including utility conventions and C-language header definitions, are included in the Base Definitions volume.
  • Definitions for system service functions and subroutines, language-specific system services for the C programming language, function issues, including portability, error handling, and error recovery, are included in the System Interfaces volume.
  • Definitions for a standard source code-level interface to command interpretation services (a “shell”) and common utility programs for application programs are included in the Shell and Utilities volume.
  • Extended rationale that did not fit well into the rest of the document structure, which contains historical information concerning the contents of POSIX.1-2008 and why features were included or discarded by the standard developers, is included in the Rationale (Informative) volume.

1.3 Single Unix Specification(SUS)

目的

改善應(yīng)用的可移植性

X/Open系統(tǒng)接口(XSI)

X/Open系統(tǒng)接口

版本

Single Unix Specification(SUS)

2. Unix系統(tǒng)實(shí)現(xiàn)

Unix系統(tǒng)實(shí)現(xiàn)

3. 限制

3.1 sysconf

  • 實(shí)現(xiàn)代碼
#include "apue.h"

int main(int argc, char const *argv[])
{
    // Maximum length of a login name
    printf("LOGIN_NAME_MAX = %ld \n", sysconf(_SC_LOGIN_NAME_MAX));
    return 0;
}
  • 運(yùn)行結(jié)果
ckt@ubuntu:~/work/unix/code/Chapter2$ cc sysconf_test.c -o sysconf_test
ckt@ubuntu:~/work/unix/code/Chapter2$ ./sysconf_test
LOGIN_NAME_MAX = 256 

3.2 pathconf

  • 實(shí)現(xiàn)代碼
#include "apue.h"

int main(int argc, char const *argv[])
{
    printf("_PC_PATH_MAX = %ld \n", pathconf("/home/ckt/work/unix/
          code/Chapter2",_PC_PATH_MAX));
    return 0;
}
  • 運(yùn)行結(jié)果
ckt@ubuntu:~/work/unix/code/Chapter2$ cc pathconf_test.c -o pathconf_test
ckt@ubuntu:~/work/unix/code/Chapter2$ ./pathconf_test
_PC_PATH_MAX = 4096 

3.3 fpathconf

  • 實(shí)現(xiàn)代碼
#include "apue.h"
#include <fcntl.h>

int main(int argc, char const *argv[])
{ 
    int file_descr = -1;
    file_descr = open("/home/ckt/work/unix/code/
                         Chapter2/fpathconf_test.c", O_RDONLY);
    printf("file descriptor = %d\n", file_descr);
    printf("fpathconf = %ld \n",fpathconf(file_descr,_PC_NAME_MAX));
    return 0;
}
  • 運(yùn)行結(jié)果
ckt@ubuntu:~/work/unix/code/Chapter2$ ./fpathconf_test
file descriptor = 3
fpathconf = 255 

4. 功能測(cè)試宏


4.1 作用

4.2 示例

定義功能測(cè)試宏_TEST1和_TEST2

  • 實(shí)現(xiàn)代碼
#include "apue.h"
#include <fcntl.h>

int main(int argc, char const *argv[])
{
#if defined(_TEST1)
    printf("_TEST1\n");
#elif defined(_TEST2)
    printf("_TEST2\n");
#else
    printf("not defined\n");
#endif
    return 0;
}
  • 運(yùn)行結(jié)果
ckt@ubuntu:~/work/unix/code/Chapter2$ cc -D_TEST1 macros_test.c -o macros_test1
ckt@ubuntu:~/work/unix/code/Chapter2$ ./macros_test1
_TEST1

ckt@ubuntu:~/work/unix/code/Chapter2$ cc -D_TEST2 macros_test.c -o macros_test2
ckt@ubuntu:~/work/unix/code/Chapter2$ ./macros_test2
_TEST2

ckt@ubuntu:~/work/unix/code/Chapter2$ cc macros_test.c -o macros_test
ckt@ubuntu:~/work/unix/code/Chapter2$ ./macros_test
not defined

5. 參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末台颠,一起剝皮案震驚了整個(gè)濱河市捏悬,隨后出現(xiàn)的幾起案子瓢颅,更是在濱河造成了極大的恐慌救巷,老刑警劉巖幌墓,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件何暇,死亡現(xiàn)場(chǎng)離奇詭異陶夜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赖晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門律适,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人遏插,你說(shuō)我怎么就攤上這事捂贿。” “怎么了胳嘲?”我有些...
    開(kāi)封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵厂僧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我了牛,道長(zhǎng)颜屠,這世上最難降的妖魔是什么辰妙? 我笑而不...
    開(kāi)封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮甫窟,結(jié)果婚禮上密浑,老公的妹妹穿的比我還像新娘。我一直安慰自己粗井,他們只是感情好尔破,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著浇衬,像睡著了一般懒构。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耘擂,一...
    開(kāi)封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天胆剧,我揣著相機(jī)與錄音,去河邊找鬼醉冤。 笑死秩霍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冤灾。 我是一名探鬼主播前域,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼韵吨!你這毒婦竟也來(lái)了匿垄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤归粉,失蹤者是張志新(化名)和其女友劉穎椿疗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糠悼,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡届榄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倔喂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铝条。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖席噩,靈堂內(nèi)的尸體忽然破棺而出班缰,到底是詐尸還是另有隱情,我是刑警寧澤悼枢,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布埠忘,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏莹妒。R本人自食惡果不足惜名船,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旨怠。 院中可真熱鬧渠驼,春花似錦、人聲如沸运吓。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拘哨。三九已至,卻和暖如春信峻,著一層夾襖步出監(jiān)牢的瞬間倦青,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工盹舞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留产镐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓踢步,卻偏偏與公主長(zhǎng)得像癣亚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子获印,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容