Linux 命令 read (文件管理)——想玩转linux就请一直看下去

Linux 命令 read (文件管理)——想玩转linux就请一直看下去,第1张

Linux read命令用于从标准输入读取数值。

read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

参数说明:

1、简单读取

测试结果为:

2、-p 参数,允许在 read 命令行中直接指定一个提示。

测试结果为:

3、-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。

执行程序不输入,等待 5 秒后:

4、除了输入时间计时,还可以使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。

只接收 2 个输入就退出:

执行程序输入两个字符:

5、 -s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。

执行程序输入密码后是不显示的:

6.读取文件

每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。

通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。

测试文件 test.txt 内容如下:

测试代码:

执行结果为:

使用 -e 参数,以下实例输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录存在的):

Linux中的read命令从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量。

语法:

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p

prompt] [-t timeout] [-u fd] [name ...]

参数:

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分隔符。

-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。

-p 后面跟提示信息,即在输入前打印提示信息。

-e 在输入的时候可以使用命令补全功能。

-n 后跟一个数字,定义输入文本的长度,很实用。

-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话\就是个正常的字符了。

-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。

-t 后面跟秒数,定义输入字符的等待时间。

-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

说明

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并没有做什么实质工作,它没有刷新任何内核缓冲区,而仅仅是使文件描述符可以重用。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8362343.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存