ls -C /dev |head -5
lp* 印表機
fd* 軟碟機
sd* SCSI裝置分區
tty* 終端
dsp檔案是到音效卡的一個串連
/dev/mouse讀取這個檔案可以讀取滑鼠的單擊和位置變化
所有與檔案相關的操作:open,read,write,lseek,close,stat
終端支援read和write,但不支援lseek...
>tty //用來告訴使用者所在終端的檔案名稱
/dev/pts/0
裝置檔案的i節點儲存的是指向核心子程式的指標,而不是檔案的大小和儲存列表。
核心中傳輸裝置資料的子程式被成為裝置驅動程式
主裝置號確定處理該裝置的子程式,而從裝置號被作為參數傳遞給該程式
fcntl
目標 控制檔案描述符
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
int result=fcntl(int fd,int cmd);
int result=fcntl(int fd,int cmd,long arg);
int result=fcntl(int fd,int cmd,struct flock *lockp);
fd 需要控制的檔案描述符
cmd 需進行的操作
arg 操作的參數
lock 鎖資訊
屬性:自動添加模式(防止競爭的發生)
int s;
s=fcntl(fd,F_GETFL);
s|=O_APPEND;
result=fcntl(fd,F_SETFL,s);
if(result==-1)
perror("error");
else
write(fd,&rec,1);//write record at end;
原子操作
open支援的標誌位
O_CREAT 如果不存在,則建立該檔案
O_TURNC 如果檔案存在,則將檔案長度置為
O_EXCL 防止兩個進程建立同樣的檔案
O_EXCL、O_CREAT組合用來消除以下競爭情況:如果兩個進程同時建立相同的檔案會發生什麼情況呢?
stty -echo//不回顯字元
stty erase X //設定刪除操作
改變終端驅動的設定:
a 從驅動程式獲得屬性
b 修改所要修改的屬性
c 將修改過的屬性送回驅動程式
struct termios attribs;
tcgetattr(fb,&setting);
setting.c_lflag|=ECHO;
tcsetarr(fd,TCSANOW,&setting);
int result=tcgetattr(int fd,struct termios *info);
int result=tcgetattr(int fd,int when,struct termios *info);
when:
TCSANOW 立即更新驅動程式設定
TCSADRAIN 等待直到驅動程式隊列中的所有輸出都被傳送到終端,然後進行驅動程式的更新
TCSAFLUSH 等待直到驅動程式隊列中的所有輸出都被傳送出去,然後釋放所有隊列中的所有輸入資料,並進行一定的變化。
測試位 if(flagset&MASK)
置位flagset|=MASK
清除位flagset&=~MASK