excel操作文件描述符号

来源:互联网 发布:淘宝助理怎么上架宝贝 编辑:程序博客网 时间:2024/05/22 03:11

  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》。不提供参数时,它将标准输入输出到标准输出;提供一个文件名参数时,将该文件输出到标准输出;提供两个文件名参数时,它将提一个文件复制到第二个文件。

1234567891011121314151617181920
#! /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        ;;esaccat <&3 >&4exec 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,只需要略作修改
原创粉丝点击