【问题标题】:chdir() & multithreading in Cchdir() 和 C 中的多线程
【发布时间】:2014-05-07 10:51:59
【问题描述】:

是否可以使用chdir() 或其他命令来更改线程中的目录而不影响其他线程的 cwd ?我正在使用pthread.h

*我正在尝试编写一个处理多个客户端连接和请求的服务器程序。客户端可用的命令之一是'cd' 命令。

【问题讨论】:

  • 这听起来很吓人。你想达到什么目的?也许通过制定根本原因可以提供更多帮助。
  • 问题已更新

标签: c multithreading pthreads chdir


【解决方案1】:

不,正如其他人所提到的,当前工作目录是每个进程的属性,而不是每个线程。您可以通过存储“每个线程 CWD”的文件描述符并使用 POSIX 中指定的各种 *at() 系统调用来“模拟”每个线程(或每个客户端,或者您构建应用程序)的当前工作目录2008(openat() 等)来操作相对于该目录 fd 的路径。

【讨论】:

  • +1 我也打算吐出 *at 调用。它们不是明确的“不”,而是为 OP 提供了一些机会来实现他的目标,具体取决于他的计划。
【解决方案2】:

不,不是。当前工作目录是进程范围的设置,而不是线程设置。

最好的办法是使用完整路径显式访问目录中的文件,而不是为了这样做而更改到该目录。

【讨论】:

  • 你能提供任何参考(POSIX,也许)?上次我确切地寻找这个问题时,我只发现了一种模糊的实现定义的感觉。
  • 正如janneb 所指出的,也可以使用所谓的 *at() 调用。他们是否足以让 OP 越过球门线是他必须确定的事情。即使同时使用这两种方法,在 cwd 中模拟也有点棘手。
【解决方案3】:

回答更新的问题:

对于每个客户端,您将需要一个客户端结构,其中包括其他内容(Id、Ip、您可能认为重要的任何内容)还包含客户端当前正在可视化的目录(假设您执行类似的操作)。

因此,当来自客户端的请求到来时,您已经知道该客户端在哪个目录中工作。

【讨论】:

  • 好的,但是如果客户端尝试更改目录怎么办?我的意思是我应该使用哪个命令而不是 chdir() ?
  • 你希望客户端在目录中做什么?
  • 如果您想列出目录中的文件并发送回客户端:stackoverflow.com/questions/4204666/…,只需使用客户端的目录即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多