exec与文件描述符
来源:互联网 发布:wps软件官方下载mac 编辑:程序博客网 时间:2024/04/28 01:04
在*nux系统中,一般在操作文件时会直接使用文件名,在支持POSIX的各种环境中,提供了一系列用于操作文件的工具,短小精悍却又强大得变态。在shell环境下,还经常文件描述符(正整数)来操作文件。
系统默认打开的描述符有3个:
0 - 标准输入
1 - 标准输出
2 - 标准出错
所以,只要够斯文(别整太大的数,它不仅难记,而且你不需要),几乎所有的正整数都可以绑定到某个文件。
1、通过exec分配文件描述符
#!/bin/sh
exec 3<>hello.txt # 以读写方式绑定到文件描述符"3"
echo "hello exec" >&3 # 写入"hello exec",如果之前有内容,这里将会从文件开头进行覆盖
echo "hello world" >&3 # 写入"hello world“,新的一行!
exec 3>&- # 关闭写,禁止写,然而,实际上它也不能读了~
# 如果是exec 3<&-,关闭读,同时它也不能写了~
在上面的示例中,将文件hello.txt绑定到了描述符3,如果要将输出重定向到hello.txt,只需要略作修改
2、将标准输出重定向到hello.txt
#!/bin/sh
exec 1>hello.txt # 将输出重定向到文件hello.txt,从此以后,这个脚本中的输出都将被写入文件hello.txt
echo "hello exec"
echo "hello world"
就这么简单,在终端再也见不着输出了,因为你已经明确地告诉他,把这些信息写到文件去……
3、在上面这个示例中,输出被重定向了,如果要恢复怎么办?
#!/bin/sh
exec 100>&1 # 将文件描述符100连接到标准输出
# 由于之后还要输出到终端,所以我们不得不使用一个临时的描述符来保存它!
exec 1>hello.txt # 将输出重定向到文件hello.txt,从此以后,这个脚本中的输出都将被写入文件hello.txt
echo "hello exec"
echo "hello world"
exec 1>&100 100>&- # 将标准输出连接到100,这是之前保存的标准输出
# 将描述符100关了,一了百了,因为已经还原标准输出了,留着它实在没必要
echo "oh, my god!" # 从这句开始将显示在终端上
4、标准输入的操作与2、3相似,只是使用的是"<"
#!/bin/sh
exec 100<&0
exec <hello.txt
read line1
echo $line1
read line2
echo $line2
exec 0<&100 100>&-
read custom
- exec与文件描述符
- exec 自定义文件描述符
- 文件描述符--exec 和重定向 (linux)
- shell脚本之exec操作文件描述符 + 示例
- 关于文件描述符的close-on-exec标志位
- 文件描述符与进程描述符
- socket与文件描述符
- 文件描述符与文件名
- socket与文件描述符
- 文件描述符与缓冲区
- 第4章 处理用户输入与显示数据------------(标准文件描述符、STDIN/STDERR/STDOUT、临时重定向、永久重定向exec)
- 文件描述符与文件描述符标志
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- 有关Linux文件描述符中的close on exec标志位
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- mySql 的时间函数
- tomcat5.5中jstl和el表达式不显问题解决办法!!!
- Android 之 内存管理
- 嵌入式交叉编译工具ELDK的安装
- 如何在cakephp或者php中用jquery实现批量修改和保存?
- exec与文件描述符
- FM(带RDS)模块。 内部芯片SILICON LABS SI4705芯片 到货了
- 微软安全新闻聚焦-双周刊第十二期
- SQL SERVER 2005 安装报错
- c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root
- Google 浏览器pdf打印兼容问题解决方法
- 高性能网页开发
- Eclipse中如何使用SWT
- android 文件系统分析