【问题标题】:In C, how can I *simulate* changing the working directory of my parent process?在 C 中,我如何*模拟*更改父进程的工作目录?
【发布时间】:2015-01-04 22:10:35
【问题描述】:

看起来像我cannot change the working directory of the parent process,但是有什么方法可以模拟吗?我正在通过编写一个命令行工具x 来学习 C,该工具允许用户使用自定义命令导航文件系统。是否有可能写出类似x enter [directory] 然后x look 并得到相当于cd [directory] 然后ls 的东西?

我唯一的想法是在每个命令之前/之后读取/写入一些 .config 文件,这是一种跨多个 x 执行管理状态的方法。

我意识到这是我自己造成的问题,但我在玩 C 语言时玩得很开心,并且不想放弃我的想法,即开发一个包含 Unix 内置函数的基本文件系统遍历的工具.

【问题讨论】:

  • IMO 坚持一些状态听起来像是要走的路。
  • 你在正确的轨道上。文件系统的目的是为需要在程序调用之间持久保存的数据提供存储。您记住的当前目录就是一个很好的例子。
  • 您是否考虑过编写自己的“shell”? cd 嵌入到 shell 中,这就是它起作用的原因。尝试编写类似的东西可能会更有趣,因为您还可以执行子程序等。您可以从一个简单的带有 exit 的 read-eval-print 循环开始,然后在此基础上构建。
  • @lared,这听起来很有趣,但我不确定我会知道从哪里开始。我没有做过很多低级编程。你能推荐一些阅读或搜索的东西或教程吗?
  • 完全不必低级。它可能只是一个普通程序,它从用户那里读取一行,并根据用户写的内容做出相应的反应。之后它只是等待另一条指令。 bash 和其他 shell 大致就是这样,但它们显然很复杂。一个简单的版本可以是while(1) 循环中的switch。您可以使用变量来跟踪您的目录等。如果您绝对需要运行 shell(如 bash)的 shell 来执行某些操作,则可以使用 system 方法。它比听起来简单。

标签: c unix


【解决方案1】:

几年前我曾为类似的东西设计过(出于某种原因,我称它为鼠标)。第一次启动时,它会生成一个从 fifo 读取的后台进程。所有进一步的命令都通过 fifo 传入并从后台进程执行。

保持先进先出打开有一些困难。常规文件上的 tail -f 可能更容易。这些天来,我会用某种插座来设计它,但那是一个完整的“蠕虫罐头”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2023-03-30
    • 2015-05-11
    • 1970-01-01
    • 2018-04-25
    • 2014-11-08
    • 2011-10-18
    相关资源
    最近更新 更多