Unix/Linux編程實踐教程四 stty

來源:互聯網
上載者:User
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.