linux系統高階程式設計

2021-10-02 20:39:42 字數 3480 閱讀 5503

linux下高階程式設計的特點;涉及到核心向使用者空間提供的介面(函式)

介面的功能 引數 返回值

檔案io

標頭檔案:unistd.h fcntl.h

是從使用者空間角度考慮的輸入輸出

從核心讀資料或從檔案中讀資料叫 輸入 read函式

寫資料到核心或寫資料到檔案中叫 輸出 write 函式

開啟或建立乙個檔案 open函式

關閉乙個檔案 close函式

open(char*,flag,mode)

char* 要開啟的檔名和路徑 一般用命令列引數傳入(main引數)

標準io中有乙個庫快取

使用者有使用者快取,核心有核心快取,用write函式是直接從使用者快取到核心快取,用printf要先送到庫快取再送到核心快取 printf遇到\n時才會將庫快取內容寫到核心快取中

庫快取分為全快取行快取和無快取三種,行快取碰到\n寫到核心,全快取為寫滿快取再呼叫系統呼叫函式寫到核心,無快取只要呼叫就會立即寫到核心

行快取讀:fgets、gets、printf、fprintf、sprintf

寫:fputs、puts、scanf

全快取讀:fread

寫:fwrite

fopen和fclosefputs和fgets

charfgets(chars,int size,filestream)

引數一:快取,即都到**去

引數二:讀多少個位元組

第三個引數:從什麼地方讀

返回值成功為s(快取的位址),若在檔案尾端或出錯則為null

int fputs(const chars,filestream)

引數一:快取,即寫什麼內容

引數二:寫到**去(或者stdin標準輸入stdout標準輸出stderr標準出錯)

若成功則為非負值,出錯則為eof

fclose關閉乙個檔案,關閉時會重新整理快取資料,會把已有快取強制輸送出去

stderr為無快取的

fflush fseek rewind ftell

fflush會強制將庫快取送到核心中

fclose中包換fflush

fflush(filefp)

fseek()引數與lseek一樣但返回值不同

成功返回0 失敗返回 -11

rewind(filefp)用於設定流的檔案位置指示為檔案開頭,該函式呼叫成功無返回值

rewind(fp)等價於fessk(fp,0,seek_set)

ftell(filefp)

用於取當前檔案位置指標。呼叫成功則返回當前檔案指標位置,出錯則為-1l

行快取讀寫函式gets puts fprintf sprintf

chargets(chars)

int puts(const char*s)

返回值與fgets fputs相同

gets只能從標準輸入讀,不能指定長度,可能造成快取越界 gets不讀入新行符,fgets讀入新行符。

puts只能向標準輸出中寫。puts輸出時會新增乙個新行符(\n )

int fprintf(filestream,「字串格式」)

fprintf既可以向標準輸出(顯示屏)輸出,也可以向檔案內輸出

int sprintf(str)「字串格式「輸出內容到乙個字串中

## 乙個字元讀寫函式fgetc和fputc

**不是行快取

int fgetc(filefp)

將檔案中的乙個字元輸出到顯示器,成功返回輸出值,到檔案結尾時返回eof

int fputc(int c,filefp)

輸入乙個字元到檔案中。成功則返回輸入字元,出錯返回eof(實際就是-1)

feof、ferror、clearerr

int feof(file*stream)

功能:判斷是否已經到檔案結束

引數:檔案流指標

返回值:到檔案結束,返回非零,沒有返回0

注意,feof要先讀一次才能判斷,在用作判斷條件時前面應該先讀,否則會出現多讀一次情況

int ferror(filestream)

功能:判斷是否讀寫錯誤(判斷getc等函式是否返回eof)

引數:檔案流指標

返回:是讀寫錯誤返回非0不是返回0

void clearerr(filestream)

功能,清除流錯誤

引數:檔案流

fread、fwrite 全快取函式

size_t fread(voidptr,size_t seze ,size_t nmemb,filestream)

soze_t fwried(const voidptr,size_t size size_t nmemb.filestream)

引數一:快取位址

引數四:寫到那裡去/從**讀

引數二size:寫的內容中,每一單元所佔的位元組數

引數三:nmemb:寫的內容中,有多少個單元數

例如charbuf

引數二位1引數三為128

int buf

引數二為4 引數三為128

返回值,實際讀寫的單元數

標頭檔案opendir(只能開啟目錄)

mkdir 建立目錄

readdir 都目錄(讀取到的是目錄下的子檔案或者子檔案的資訊,不涉及內容,只包括檔名稱,型別等)

rewinddir 調整到開頭 調整指標位置

telldir 返回當前位置

seekdir 調整位置

closedir 關閉目錄

diropendir(const charpathname)

引數:開啟的目錄以及路徑

返回值:成功返回目錄流指標,出錯返回null

int mkdir(const char *path,mode-t mode)

path為欲建立的目錄檔案路徑

mode為該目錄的訪問許可權

返回值,成功返回0,否則返回-1

struct direntreaddir(dirrdr)

引數目錄流指標

返回值:成功則為struct dirent指標,若在目錄尾或出錯返回null

struct dirent定義在標頭檔案dirent.h中

此結構至少包換下列兩個成員:

struct dirent

{ino_t ino; inode號

char d_name[name_max+10;檔名]

void rewinddir(dir*dr)

引數:目錄流指標

重置讀取目錄的位置為開頭

long telldir(dir*dirp)

引數:目錄流指標

返回值:目錄流當前位置

void seekdir(dir*dr,long loc)

引數:目錄流指標和偏移量,

linux高階程式設計 系統呼叫I O函式

檔案描述符 檔案描述符是非負整數。開啟現存盤案或新建檔案時,系統 核心 會返回乙個檔案描述符。檔案描述符用來指定已開啟的檔案。在系統呼叫 檔案io 中,檔案描述符對檔案起到標識作用,如果要操作檔案,就是對檔案描述符的操作 乙個程式執行或者乙個程序開啟時,系統會自動建立三個檔案描述符 0 標準輸入 1...

Linux 高階Socket程式設計

基本套接字分為客戶機 伺服器和點對點模式。c s sever client 一般採用tcp b s browser server 一般採用udp 常用的資料結構有in addr 儲存ip位址 sockaddr in 表示internet協議位址結構 sockaddr 儲存主機ip位址和介面資訊 st...

linux系統高階命令高階 推薦

輸出重定向 覆蓋檔案內容 echo 123 test 把原來的內容覆蓋 echo 123 test 把原來的存在 並存 echo ken2 etc hostame 實現改名 2 錯誤的覆蓋輸出 echo 2 2 不覆蓋 一和二不用判斷都可以輸入到檔案中去 不覆蓋 輸入重定向 wc l etc pas...