歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> UNIX學習之UNIX編程資料大收集一

UNIX學習之UNIX編程資料大收集一

日期:2017/2/27 17:42:32   编辑:Unix教程

  第一章 概述
  
  1.1UNIX的版本
  
  本教材的目的是講解UNIX系統下的C程序設計,使C程序員快速掌握UNIX系統下的編程開發。作者在進行UNIX編程開發的實踐過程中,深感實例的重要性-一個簡短的C語言實例往往勝過長篇累牍的文字說明,當然了,文字說明也是必不可少的。本教材將本著實例優先的原則,使您能夠對UNIX編程開發快速入門。
  
  UNIX的版本不統一是出了名的,從UNIX的發展歷史來看,主要有兩大流派:AT&T的UNIX系統V版本和加州大學伯克利分校的BSD版本,在此基礎上,各家UNIX廠商均開發了各自的UNIX操作系統。如:工作站廠商中有HP的hpux、SUN的solaris、SGI的irix、IBM的AIX等,小型機有VAX上的Ultrix,微機上有SCO UNIX、微軟的Xenix以及隨著Internet而風靡全球的Linux等。由於WindowsNT的異軍突起,對UNIX的市場形成巨大的威脅,各大UNIX廠商不得不聯合起來,在工作站市場上,統一以系統V版作為標准,加入BSD版本中的一些優點,支持統一的CDE(CommonDesktop Environment)窗口環境,以與Windows NT進行對抗。
  
  1.2 UNIX編程環境
  
  UNIX操作系統通過Shell程序實現系統與用戶的交互,在Shell提示符下,用戶鍵入UNIX命令,即可得到操作系統的輸出結果。BSD系統的常用Shell是C Shell,缺省提示符是"%",系統V的常用Shell是Bourne Shell(現在多為KornShell),缺省提示符是"$",有關Shell的編程,我們在後面的章節中進行介紹。
  
  UNIX上的標准編譯器是cc。在Shell提示符下(以C Shell為例)鍵入下列命令:
  
  %cc -o hello hello.c
  
  即將C文件hello.c編譯為可執行文件hello。在編譯多個文件生成一個可執行文件時,UNIX提供命令make。用戶需要針對多個C文件,按照一定的格式編寫一個叫做Makefile的文本文件。下面是SGI上的一個Makefile的例子:
  
  CC = cc
  CFLAGS = $(DEBUG) -cckr -I$(INC)/X11 -DSYSV
  DEBUG = -g
  INC = /usr/include
  LDFLAGS = -lXext -lXm -lXt -lX11 -lPW -lc
  OBJS = initx.o windowx.o
  TGTS = showxwin
  all:: $(TGTS)
  showxwin: $(OBJS)
  $(CC) -o $@ $(OBJS) $(CFLAGS) $(LDFLAGS)
  
  大寫字母的字串是一些宏,CC是編譯器的名字、CFLAGS定義cc的編譯開關、DEBUG是調試宏、INC是頭文件所在目錄、LDFLAGS定義了編譯連接庫、OBJ定義了目標文件名、TGTS定義了可執行文件名。在Shell提示符下直接鍵入:%make
  
  即可將Makefile中指定的所有C文件進行編譯並生成可執行文件。
  
  1.3 UNIX編程中的基本概念
  
  在討論UNIX編程開發前,首先需要闡明系統調用和庫函數這兩個概念。
  
  一個系統調用指一個需要操作系統代表用戶程序來執行某些任務的請求。例如:read是一個系統調用,它請求操作系統存儲在一個磁盤設備(或其他設備)上的數據去填充一個緩沖區。如果任何人在他們想執行任務的時候都能隨便訪問設備,那麼後果將是不可預測的。所以,這種服務必須請求操作系統來做,它(經常是透明地)記錄所有處理每個設備的請求。
  
  而一個庫函數,並不經常需要操作系統來執行其任務。例如數學庫函數中的sin(),cos()等,這些計算只需要簡單地對一個有限序列求和,所以並不需要操作系統干預。
  
  在UNIX操作系統中,有一個常用的命令man,可用來查閱命令、庫函數和系統調用等的具體使用方法。傳統 Unix 聯機幫助手冊的分節法為:
  
  1 用戶級命令(User-level commands)
  
  2 系統調用(System calls)
  
  3 庫函數(Library functions)
  
  4 設備及驅動程序(Devices and device drivers)
  
  5 文件格式(File formats)
  
  6 游戲(Games)
  
  7 雜項(Various miscellaneous stuff - macro packages etc.)
  
  8 系統維護及操作命令(System maintenance and operation commands)
  
  第二章 標准輸入/輸出庫
  
  2.1 概述
  
  本章介紹UNIX的標准輸入/輸出庫,UNIX提供一些庫函數完成高級輸入/輸出,為程序員提供了三方面的主要功能:
  
  ·自動開辟緩沖區。即使一次讀或寫的數據只有幾個字節,庫函數仍然在大到由數千個字節組成的"塊"中執行實際輸入或輸出(緩沖區大小通常由頭文件stdio.h中的常量BUFSIZ定義)。這個緩沖區在內部開辟給庫函數使用,對於程序員來說是透明的;
  
  ·自動執行輸入和輸出轉換。
  
  ·輸入輸出被自動格式化。以上兩點在C語言的教程中一般均以講到。
  
  在標准輸入/輸出庫中,一個文件被稱為一串字符流,並且被一個指向類型為FILE的目標指針所描述,該指針被稱為文件指針。在UNIX中文件指針stdin、stdout、stderr是預先定義好的,分別對應標准輸入(鍵盤)、標准輸出(終端屏幕)和標准錯誤輸出。
  
  2.2 庫函數介紹
  
  ·文件創建和關閉
  
  fopen()用於打開已存在的文件或創建新文件
  
  ·文件讀寫
  
  1、 一次處理一個字符 getc(), putc()
  
  2、 一次處理多個字符 fgets(), fputs()
  
  3、 文件的二進制讀寫 fread(), fwrite()
  
  4、 文件的格式化輸入/輸出 fscanf(), fprintf()
  
  5、 字符串的格式化輸入/輸出 sscanf(), sprintf()
  
  ·文件移動定位
  
  用於在文件中移動的標准輸入/輸出庫函數是fseek(),它接收三個參數:一個文件指針指向一個打開的字符流;一個整數指明要移動的字節數,稱為offset;一個整數指明從文件中什麼位置移動。
  
  第三章 低級輸入/輸出
  
  3.1 概述
  
  與第二章內容相對應,本章介紹UNIX系統中通過系統調用來實現的輸入/輸出,通常稱之為低級輸入/輸出。這些系統調用能夠直接實現對設備(如磁帶驅動器等)的輸入和輸出,程序員能夠決定要使用的緩沖區的大小,而不象標准輸入/輸出庫函數那樣透明設定緩沖區大小。
  
  在標准輸入/輸出庫中,一個文件是由一個文件指針來對應的。當使用低級界面時,則用一個文件描述字對應一個文件。文件描述字是一個小的整數。有3個事先定義的文件描述字0、1和2,分別對應標准輸入、標准輸出和標准錯誤輸出。一般說來,文件描述字都是作為系統調用的第一個參數給出的。
  
  3.2 相關系統調用介紹
  
  ·文件創建和關閉
  
  open()用於為讀寫而打開一個文件,或用它來創建新文件。
  
  int open (const char *path, int oflag, ... /* mode_t mode */);
  
  open使用三個參數:一個字符串path包含要打開的文件名;一個整數oflag指明文件將被如何打開;整數mode在創建文件時使用。常用的oflag包括:
  
  O_RDONLY 打開文件僅用於讀。
  
  O_WRONLY 打開文件僅用於寫。
  
  O_RDWR 打開文件用於讀寫。
  
  O_CREAT 如果文件不存在,則創建,此時mode作為第三個參數給出。
  
  close()用於關閉一個已經打開的文件。
  
  ·文件讀寫
  
  read()用於讀文件,格式為:
  
  read(int fildes, void *buf, size_t nbyte);
  
  三個參數說明如下:filedes是文件描述字;指針buf指向一個數據將被讀入的緩沖區;整數nbytes指明要讀的字節個數。成功時返回實際讀入的字節數,出錯則返回-1。
  
  write()用於寫文件,與read類似,格式為:
  
  write(int fildes, void *buf, size_t nbyte);
  
  三個參數說明如下:filedes是文件描述字;指針buf指向一個數據將被寫入的緩沖區;整數nbytes指明要寫的字節個數。成功時返回實際寫入的字節數,出錯則返回-1。
  
  ·文件移動定位
  
  用於在文件中移動的低級輸入/輸出系統調用是lseek(),與fseek()類似,它也接收三個參數:一個文件描述字對應一個打開的文件;一個整數指明要移動的字節數,稱為offset;一個整數指明從文件中什麼位置移動。
  
  ·復制文件描述字
  
  有時候有不只一個文件描述字對應一個文件。當創建子進程時(參加後面關於進程開發的章節),這一點很常用。為了獲得一個新的文件描述字,並保證其與fd對應同一個文件,應調用
  
  fd2 = dup(fd)
  
  fd2現在和fd對應同一個文件,並且和fd一樣在文件中有相同的位置。
  
  第四章 文件與目錄編程
  
  4.1 基本概念
  
  ·文件目錄概述
  
  文件系統是UNIX對計算機技術的一大貢獻!UNIX系統的文件管理十分靈活、功能強大,許多首次在UNIX系統中出現的概念被其他操作系統所采用,如MS-DOS等。
  
  UNIX系統提供了一種層次目錄方案。目錄就象存放一組文件的櫃子一樣,目錄也可以包括在其他目錄中,這樣就形成了一種龐大的、具有分支的組織方式,這種結構通常被稱為樹狀結構。目錄實際上也是一種特殊的文件。命令、數據文件、其他命令甚至設備(特別文件)都可以作為目錄中的項(文件)。
  
  ·I標識號、I列表和I節點
  
  一個目錄是由一系列結構組成的;每個結構包含一個文件名和一個指向文件自身
Copyright © Linux教程網 All Rights Reserved