【问题标题】:If I chdir within a thread, will that affect the cwd of the parent program?如果我在一个线程中 chdir,那会影响父程序的 cwd 吗?
【发布时间】:2012-11-18 09:21:44
【问题描述】:

如果我在一个线程中 chdir,那会影响父程序的 cwd 吗?

【问题讨论】:

  • 您试一试并告诉我们如何?
  • 带父程序是指线程的进程还是线程进程的父进程?

标签: c pthreads chdir


【解决方案1】:

是的。

如果您在多线程应用程序中需要相对路径,使用at() 版本的函数是最安全的。例如,openat() 就像open()

int openat(int dirfd, const char *pathname, int flags);

第一个参数是目录的fd。该路径是相对于该目录的。

【讨论】:

  • 那么将文件复制到目录中的替代方法是什么?我不想为 write() 调用做一个绝对路径。如果 chdir'ing 不是线程安全的,并且我有多个线程将文件从一个文件夹复制到其父文件夹,该怎么做?
  • 在最近的 POSIX 系统上,您可以使用“at”函数:例如,openat()。它们允许您使用相对于目录的路径。您将目录作为文件描述符打开,然后您可以打开与其相关的文件。
  • 这是一个非常有用的答案,除了我足够 New2This 我不知道如何创建目录文件描述符。我也找不到任何互联网示例...
  • @New2This:这是一个常规文件描述符。您可以使用open()openat(),就像使用文件一样。 (不过,您无法从描述符中读取数据。)
【解决方案2】:

是的,“父程序”(线程进程的初始线程)会受到影响,因为当前目录由进程的所有线程共享。

http://linux.die.net/man/7/pthreads

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2012-03-10
    • 1970-01-01
    • 2014-08-11
    相关资源
    最近更新 更多