excel操作文件描述符号

  Linux系统中,每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识这个文件。大家知道,标C中,每个进程默认打开的有三个文件,标准输入、标准输出、标准错误输出,分别用一个FILE结构的指针来标示,即stdin、stdout、stderr,这三个结构中分别维护着三个文件描述符0、1、2。

打开文件描述符

  Shell中,0、1、2也是默认可用的三个文件描述符。为了利用其他文件描述符来标识特定文件,我们需要使用exec命令打开该文件,并指定一个数字作为描述符:

exec m> outfile 
exec n< infile

  第一行打开文件outfile,并赋予文件描述符m,第二行打开文件infile,并赋予文件描述符n。

复制文件描述符

  符号<&可以复制一个输入文件描述符,符号>&可以复制一个输出描述符。例如下面命令打开文件描述符n,并将其作为文件描述符m的副本:

exec n<&m
关闭文件描述符
exec n<&-
exec m<&-
一个演示脚本

  下面的这个脚本修改自《A Practical Guide to Linux Command, Editions, and Shell Programming》。不提供参数时,它将标准输入输出到标准输出;提供一个文件名参数时,将该文件输出到标准输出;提供两个文件名参数时,它将提一个文件复制到第二个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /bin/sh
 
case $# in
    0)
        exec 3<&0 4>&1
        ;;
    1)
        exec 3<$1 4>&1
        ;;
    2)
        exec 3<$1 4>$2
        ;;
    *)
        echo "Usage: `basename $0` [source [dest]]"
        exit 1
        ;;
esac
cat <&3 >&4
exec 3<&- 4<&-
exit 0
 
 
 
 
      
      

exec command

重新启动一个shell,command通常是一个脚本。但是,exec对文件描述符操作时(只有在这时候),不会覆盖当前的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,只需要略作修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值