linuxread
Ⅰ linux下系統調用函數read()
open系統調用
open函數的三個參數:
(1)path是已經存在的文件的路徑;
(2)oflags參數:若值為 O_RDONLY ,就以只讀方式打開文件;
若值為 O_WDONLY,就以只寫方式打開文件;
若值為 O_RDWR,就以讀寫方式打開文件;
(3)參數mode:文件的許可權,對於一個已經存在的文件,參數mode是沒有用的,通常將其省略,因此這種情況下open調用只需兩個參數。
創建新文件:
前面已經說到,當文件不存在時,open會創建一個新文件(僅能是普通文件),我們只需要用 or操作向open的 oflags參數中加入標志O_CREAT即可。這樣可以創建一個新的只讀文件,但是這沒有任何意義,因為所創建的新文件沒有任何可讀內容。因此一般需要 O_CREAT與 O_WRONLY或 O_RDWR一起使用,此時就需要mode參數了。
例如:
int fd = open("/home/LY/newfile",O_RDWR | O_CREAT,MODE_FILE)
參數mode僅在創建新文件時有效,對於一個已經存在的文件,它沒有任何作用。
關於open的flags參數:
除了以上介紹的 open標志外,open還有許多標志,具體的如下表所示:
標志
解釋
O_RDONLY
只讀方式打開
O_WRONLY
只寫方式打開
O_RDWR
讀寫方式打開
O_APPEND
每次寫都追加到文件的尾端
O_CREAT
若文件不存在則創建文件
O_DSYNC
設置同步I/O方式
O_EXCL
如果文件已存在,則出錯;必須與O_CREAT一起使用
O_NOCTTY
不將此設備作為控制終端
O_NONBLOCK
不等待命名管道或特殊文件准備好
O_RSYNC
設置同步I/O方式
O_SYNC
設置同步I/O方式
O_TRUNC
將其長度截短為0
write系統調用
write函數的三個參數:
(1)fildes: 文件描述符
(2)buf:指定寫入數據的數據緩沖區
(3)nbytes:指定寫入的位元組數
函數返回值:
成功:已寫的位元組數
-1 :出錯
0:未寫入任何數據
例子:
運行結果:
read系統調用
read函數的三個參數:
(1)fildes:文件描述符
(2)buf:指定讀入數據的數據緩沖區
(3)nbytes:指定讀入的位元組數
函數返回值:
成功:已讀的位元組數
0:未讀入任何數據
-1:出錯
例子:
運行結果:
close系統調用
通過對 close進行分析,我們會發現close並沒有做什麼實質工作,它沒有刷新任何內核緩沖區,而僅僅是使文件描述符可以重用。
Ⅱ 在linux中用read,怎麼知道是否讀到數據的末尾以及怎麼知道是否讀到文件的末尾謝謝!!!
你的這個串口設備在打開(也就是調用open函數獲取設備描述符)的時候設置的是非阻塞方式。導致串口上沒數據的時候read也立即返回,但是你的while已經把有效的數據讀走了,if裡面讀到的一定是空的,所以什麼也不列印。
建議
1. 在打開串口設備時使用阻塞方式,不會設置的話查查open系統調用的幫助,它有個flag;
2. 把while循環內的if語句去掉。
Ⅲ 如何使用linux read命令
read 命令在linux裡面的多數是用在寫shell腳本的時候,如果想知道參數的話自己查看幫助吧。常用的有 read -p 輸出 -s 把輸出作為命令保存 等等
Ⅳ linux 中 read 命令是什麼意思
read命令用於讀取終端輸入。
類似於c語言中的scanf()函數.
Ⅳ linux read讀取問題
注意:以下實例省略了錯誤處理。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
typedef struct
{
char name[20];
int age;
} Person;
int main(int argc, char **argv)
{
// open
int fd = open("name.file", O_RDWR|O_CREAT, 0666);
// write
Person zhang3;
memset((void*)&zhang3, 0x00, sizeof(Person));
strcpy(zhang3.name, "zhang3");
zhang3.age = 42;
write(fd, (void*)&zhang3, sizeof(Person));
// lseek
lseek(fd, 0, SEEK_SET);
// read
Person li4;
memset((void*)&li4, 0x00, sizeof(Person));
read(fd, (void*)&li4, sizeof(Person));
printf("%s\n", li4.name);
printf("%d\n", li4.age);
// close
close(fd);
return 0;
}
Ⅵ linux 中$,read分別是什麼意思
樓上的都有理,$這個代表的是普通用戶的意思,我覺得你應該問的是shell裡面的意思,shell裡面就是提取變數。read 讀取鍵盤的輸入作為程序往下執行的開始。
Ⅶ linux 下編寫的一個帶超時限制的read()
輸入輸出都有緩沖區概念,在輸入hello world不回車,其實已經放到了read緩沖區中,在超時關閉read()的時候,系統會flush緩沖區,其實就是把它放到內存中,所以這時候n已經有值了,write當然會輸出hello world了。
Ⅷ linux 中read命令後面-p是什麼意思呢
p是prompt的縮寫,即由這個開關項給出提示信息,例如
read -p 'please input you choice:\n' choice
回車後屏幕會顯示:
please input you choice:
那麼之後你輸入的東西就會被保存到choice變數中了
另外,read是bash的內建命令,這些選項的作用都可以通過man命令獲得的
Ⅸ LInux中read和pread問題
pread,read返回的都是成功讀取到位元組數么,而linux 32位機float類型的大小就是4個位元組(至少我用的是~),可別誤認為float類型大小是8位元組了。返回的r,b是4說明讀取成功了啊