当前位置: 首页 > 面试题库 >

Bash读取/写入文件描述符-寻求文件的开始

冷宏茂
2023-03-14
问题内容

我试图在bash中使用读/写文件描述符,以便可以删除文件描述符之后引用的文件,例如:

F=$(mktemp)
exec 3<> "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&3

但是该cat命令没有输出。如果我使用单独的文件描述符进行读写,则可以实现我想要的:

F=$(mktemp)
exec 3> "$F"
exec 4< "$F"
rm -f "$F"

echo "Hello world" >&3
cat <&4

打印Hello world

我怀疑当您从写入切换到读取时,bash不会自动寻求文件描述符的开始,并且以下bash和python代码的组合证实了这一点:

fdrw.sh

exec 3<> tmp
rm tmp

echo "Hello world" >&3
exec python fdrw.py

fdrw.py

import os

f = os.fdopen(3)
print f.tell()
print f.read()

这使:

$ bash fdrw.sh
12

$ # This is the prompt reappearing

有没有一种方法可以仅使用bash来实现我想要的功能?


问题答案:

不,bash的重定向没有任何“寻求”的概念。它以长流从头到尾进行读取/写入(大部分)。



 类似资料:
  • 问题内容: 我正在Linux C项目上工作,无法使用文件描述符。 我有一个孤立的文件描述符(文件是open()然后是unlink(),但是fd仍然很好),它具有只写权限。原始备份文件具有完全权限(使用S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH创建),但是可惜文件是用O_WRONLY打开的。是否可以复制文件描述符并将副本更改为O_RDWR? 伪代码: 提前致谢!-安德

  • 文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作

  • 文件描述符接口 函数 int  fd_new (void)   分配文件描述符   struct dfs_fd *  fd_get (int fd)   获取文件描述结构   void  fd_put (struct dfs_fd *fd)   放置文件描述符   int  fd_is_open (const char *pathname)   判断文件是否已被打开   int  select (

  • 问题内容: 我正在尝试运行一个应用程序(例如),因此它将从文件中读取stdin并从stdout写入另一个文件。 目前我有 它可以按预期工作,因为我可以对该文件进行某些操作,并且top可以接收它。但是我无法重定向top的输出。我该如何实现? 编辑: 好吧,让我们从头开始。我正在测试: 问题答案: 让我们忘掉这似乎是一条红色的鲱鱼。 要将stdin或stdout映射到文件,可以使用重定向: 甚至:

  • 本文向大家介绍Bash中文件描述符的详细介绍,包括了Bash中文件描述符的详细介绍的使用技巧和注意事项,需要的朋友参考一下 前言 Linux将所有内核对象当做文件来处理,系统用一个size_t类型来表示一个文件对象,比如对于文件描述符0就表示系统的标准输入设备STDIN,通常情况下STDIN的值为键盘,如read命令就默认从STDIN读取数据,当然STDIN的值是可以改变的,比如将其改成其他文件,

  • 问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用: