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说明读取成功了啊