2.shell程式設計
3.檔案操作
3.5 標準i/o庫
標頭檔案 : 可以使用-i標準來包含儲存在子目錄或非標準位置的標頭檔案
例如 $ gcc -i /usr/openwin/include fred.c
用grep命令來搜尋包含某些特定定義和函式原型標頭檔案是很方便的
可以使用《和》 對輸入輸出進行重定向,使用|在同時執行的程式之間實現資料的管道傳遞,使用$(…)獲取子程序的輸出。
例 ls -1>lsoutput.txt
檔案描述符0代表乙個程式的標準輸入,檔案描述符1代表標準輸出,檔案描述符2代表標準錯誤輸出
可以使用》操作符將輸出內容附加到乙個檔案中。
例如$ ps >> lsoutput.txt
write 系統呼叫
系統呼叫write的作用是把緩衝區buf的前n bytes個位元組寫入與檔案描述符fildes關聯的檔案中
#include
size_t write
(int fildes,
const
void
*buf, size_t nbytes
#include
size_t read
(int fildes,
void
*buf,size_t nbytes)
;
open系統呼叫
為了建立乙個新的檔案描述符,你需要使用系統呼叫open
#include
#include
#include
intopen
(const
char
*path,
int oflags)
;int
open
(const
char
*path,
int oflags,mode_t mode)
;
模式
o_rdonly 以唯讀方式開啟
o_wronly 以只寫方式開啟
o_rdwr 以讀寫方式開啟
當你使用帶有o_creat標誌的open呼叫來建立檔案時,你必須使用有3個引數格式的open呼叫
s_irusr:讀許可權,檔案屬主
s_iwusr:寫許可權,檔案屬主
s_ixusr:執行許可權,檔案屬主
s_irgrp:讀許可權,檔案所屬組
s_iwgrp:寫許可權,檔案所屬組
s_ixgrp:執行許可權,檔案所屬組
s_iroth:讀許可權,其他使用者
s_iwoth:寫許可權,其他使用者
s_ixoth:執行許可權,其他使用者
open (
"myfile"
,o_creat,s_irusr|s_ixoth)
;
1.umask
umask是乙個系統變數,它的作用是:當檔案被建立時,為檔案訪問許可權設定乙個掩碼 。執行umask命令可以修改這個變數的值。
2.close系統呼叫
使用close呼叫終止檔案描述符fildes與其對應檔案之間的關聯。檔案描述符被釋放並能夠重新使用。close呼叫成功時返回0,出錯時返回-1.
#include
intclose
(int fildes)
;
3.ioctl系統呼叫
ioctl提供了乙個用於控制裝置及其描述符行為和配置底層服務的介面。終端,檔案描述符,套接字甚至磁帶機都可以有為他們定義的ioctl。
#include
intioctl
(int fildes,
int cmd,..
.);
1,lseek系統呼叫
lseek系統呼叫對檔案描述符fildes的讀寫指標 進行設定。可以用它來設定檔案的下乙個讀寫位置。讀寫指標既可以被設定為檔案中的某個絕對位置,也可以設定為相對於當前位置或檔案尾的某個相對位置。
#include
#include
off_t lseek
(int fildes,off_t offsrt,
int whence)
;
offset 引數用來指定位置,而whence引數定義該偏移植的用法。whence可以取下列值之一。
seek_set:offset是乙個絕對位置。
seek_cur:offset是相對於當前位置的乙個相對位置。
seek_end:offset是相對於檔案尾的乙個相對位置。
lseek返回從檔案頭到檔案指標被設定處的位元組偏移,失敗時返回一。
引數offset的型別off_t是乙個與具體實現有關的整數型別,它定義在標頭檔案sys/type.h中
2.fstat,stat和lstat系統呼叫
fstat系統呼叫返回與開啟的檔案描述符相關的檔案的狀態資訊,該資訊將會寫道乙個buf結構,buf中的位址以引數形式傳遞給fstat.
#include
#include
#include
intfstat
(int fildes,
struct stat *buf)
;int
stat
(const
char
*path,
struct stat *buf)
;int
lstat
(const
char
*path,
struct stat *buf)
當檔案是乙個符號鏈結時,lstat返回的是該符號鏈結本身的資訊,而sata返回的是該鏈結指向檔案的資訊。
3.dup和dup2系統呼叫
dup系統呼叫提供了一種複製檔案描述符的方法,使我們能夠通過兩個或者多個不同的描述符來訪問同乙個檔案。這可以用於在檔案的不同的位置對資料進行讀寫。dup系統呼叫複製檔案描述符fildes,返回乙個新描述符。dup2系統呼叫則是通過明確指定目標描述符來把乙個檔案描述符複製為另外乙個。
#include
intdup
(int fildes)
;int
dup2
(int fildes,
int fildes2)
;
1.fopen函式
fopen 函式類似於底層的open系統呼叫。它主要用於檔案和終端的輸入輸出。如果你需要對裝置進行明確的控制,那最好使用底層系統呼叫,這樣可以避免用函式庫帶來一些潛在問題,如輸入/輸出緩衝。
#include
file *fopen (
const
char
*filename,
const
char
*mode)
;
fopen開啟由filename引數指定的檔案,並把它與乙個檔案流關聯起來,mode引數指定檔案的開啟方式。
fopen在成功時返回乙個非空的file*指標,失敗時返回null值。
2.fread函式
fread庫函式用於從乙個檔案流裡讀取資料。資料從檔案流stream 讀到由ptr指向的資料緩衝區裡。fread和fwrite都是對資料記錄進行操作,size引數指定每個資料記錄的長度,計數器nitems給出要傳輸的記錄個數。它的返回值是成功讀到資料緩衝區裡的記錄個數(而不是位元組數)。當達到檔案尾時,它的返回值可能會小於nitems,甚至可以是零。
#include
size_t fread
(void
*ptr,size_t size,size_t nitems,file *stream)
;
3.fwrite函式
從指定的資料緩衝區裡取出資料記錄,並把它們寫道輸出流中。
nclude
size_t fwrite
(const
void
*ptr,size_t size ,size_t nitems, file *stream)
;
4.fclose函式
fclose庫函式關閉指定的檔案流,使所有尚未寫出的資料都寫出。因為stdio庫會對資料進行緩衝,所以使用fclose是很重要的。如果程式需要確保資料已經全部寫出,就應該呼叫fclose函式。
#include
intfclose
(file *stream)
;
5.fflush函式
fflush庫函式作用是把檔案流裡的所有未寫出資料立刻寫出。
#include
intfflush
(file *stream)
;
6.fseek函式
fseek函式是與lseek系統呼叫對應的檔案流函式。它在檔案流裡為下一次讀寫操作指定位置。
#include
intfseek
(file *stream ,
long
int offset,
int whence);
7.fgetc,getc和getchar函式
fgetc函式從檔案流裡取出下乙個位元組並把它作為乙個字元返回。
#include
int fgetc (file *stream)
;int getc (file *stream)
;int
getchar()
;
學習筆記 Linux學習
echo i am whoami 反引號裡的內容會被當做命令執行 echo the cpu in my pc has cat proc cpuinfo grep c processor cores 等價於反引號 a 10 定義乙個變數,等號兩邊不能有空格 echo a的值為 a a的值為10 ech...
linux學習筆記
開機流程簡介 1 載入 bios 的硬體資訊,並取得第乙個開機裝置的代號 2 讀取第乙個開機裝置的 mbr 的 boot loader 亦即是 lilo,grub,spfdisk 等等 的開機資訊 3 載入 kernel 作業系統核心資訊,kernel 開始解壓縮,並且嘗試驅動所有硬體裝置 4 ke...
Linux 學習筆記
配置 telnet 服務 vi etc hosts.deny 在all all 行前加 號注釋,登出該行。新增一行all all 用 登出disable yes,或者修改為 disble no vi etc pam.d login 在auth required lib security pam se...