天天看點

linux驅動開發常用指令

1.READ

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
           

描述

read() 從檔案描述符 fd 中讀取 count 位元組的資料并放入從 buf 開始的緩沖區中.

如果 count 為零,read()傳回0,不執行其他任何操作. 如果 count 大于SSIZE_MAX,那麼結果将不可預料.

傳回值

成功時傳回讀取到的位元組數(為零表示讀到檔案描述符), 此傳回值受檔案剩餘位元組數限制.當傳回值小于指定的位元組數時并不意味着錯誤;這可能是因為目前可讀取的位元組數小于指定的位元組數(比如已經接近檔案結尾,或者正在從管道或者終端讀取資料,或者 read()被信号中斷). 發生錯誤時傳回-1,并置 errno 為相應值.在這種情況下無法得知檔案偏移位置是否有變化.

2.WRITE

#include <unistd.h> 
ssize_t write(int fd, const void *buf, size_t count); 
           

描述

write 向檔案描述符 fd 所引用的檔案中寫入從 buf 開始的緩沖區中 count 位元組的資料. POSIX規定,當使用了write()之後再使用 read(),那麼讀取到的應該是更新後的資料. 但請注意并不是所有的檔案系統都是 POSIX相容的.

傳回值

成功時傳回所寫入的位元組數(若為零則表示沒有寫入資料). 錯誤時傳回-1,并置errno為相應值. 若count為零,對于普通檔案無任何影響,但對特殊檔案将産生不可預料的後果.

3.OPEN

#includ e <sys/types.h>#include <sys/stat.h>#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode)
int creat(const char *pathname, mode_t mode);
           

open() 通常 用于将路徑名 轉換為一個檔案描述符 (一個 非負的 小 整數, 在 read , write 等 I/O操作中 将會被使用). 當 open() 調用 成功, 它會 傳回 一個 新的 檔案描述符 (永遠取 未用 描述符的 最小值). 這個調用 建立 一個新的打開檔案, 即 配置設定 一個 新的 獨一無二的 檔案描述符, 不會與 運作中的 任何 其他程式 共享 (但 可以 通過 fork (2) 系統調用 實作 共享). 這個 新的 檔案描述符 在其後 對 打開檔案操作 的函數中使用.

4.CLOSE

#include <unistd.h>
int close(int fd);
           

close 傳回 0 表示 成功 , 或者 -1 表示 有 錯誤 發生 .

5.sscanf()

#include <stdio.h>

       int scanf(const char *format, ...);
       int fscanf(FILE *stream, const char *format, ...);
       int sscanf(const char *str, const char *format, ...);

       #include <stdarg.h>

       int vscanf(const char *format, va_list ap);
       int vsscanf(const char *str, const char *format, va_list ap);
       int vfscanf(FILE *stream, const char *format, va_list ap);
           

str:源字元串

format:格式化輸入控制符

int sscanf(const char *buffer,const char *format,[argument ]…);

将buffer裡面的内容按照 指定 format的格式輸入到 argument裡面去.

成功則傳回參數數目,否則傳回-1.

sscanf(“1 2”,”%d %d %d”,buf1, buf2, buf3); 成功調用傳回值為2,即隻有buf1,buf2成功轉換,buf1,buf2代表位址

支援集合操作:

%[a-z] 表示比對a到z中任意字元

%[aB’] 比對a,B,’ 中一員

%[ ^a ] 比對非a的任意字元,并且停止讀入

與scanf不同的是,同是格式化輸入函數,scanf的輸入源是鍵盤,sscanf的輸入源是給定的字元串.

第二個參數可以是一個或多個 {%[*] [width] [{h | I | I64 | L}]type | ’ ’ | ‘\t’ | ‘\n’ | 非%符号}

1、 * 亦可用于格式中, (即 %d 和 %*s) 加了星号 () 表示跳過此資料不讀入. (也就是不把此資料讀入參數中)

2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。

3、width表示讀取寬度。

4、{h | l | I64 | L}:參數的size,通常h表示單位元組size,I表示2位元組 size,L表示4位元組size(double例外),l64表示8位元組size。

5、type :這就很多了,就是%s,%d之類。

6、特别的:%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會向目标參數中寫入值

失敗傳回0 ,否則傳回格式化的參數個數

6.