我该使用哪个gtk方法来获取Ubuntu中的临时路径?

6

我该如何在Ubuntu中获取临时目录路径?

5个回答

5
在大多数类Unix系统中,您应该寻找/tmp。如果这不是您想要的答案,您应该指定您所说的Ubuntu的哪个部分。
某些应用程序将允许您指定它们的临时文件放置在哪里(例如使用TMPTEMPTMPDIR环境变量),但是如果/tmp不存在,很多东西都会在UNIX下中断,所以只使用/tmp是安全的。如果您想使其可配置,在您的代码中,您可以使用以下完整程序中的getTmpDir()函数:
#include <stdio.h>
#include <stdlib.h>

const char *getTmpDir (void) {
    char *tmpdir;

    if ((tmpdir = getenv ("TEMP")) != NULL)   return tmpdir;
    if ((tmpdir = getenv ("TMP")) != NULL)    return tmpdir;
    if ((tmpdir = getenv ("TMPDIR")) != NULL) return tmpdir;

    return "/tmp";
}

int main(void) {
    const char *xyzzy = getTmpDir();
    printf ("Temporary directory =  %s\n", xyzzy);
    return 0;
}

以下是在我的CygWin环境中输出的结果(我将TEMPTMP都设置为此值):

Temporary directory =  /cygdrive/c/Users/Pax/AppData/Local/Temp

这基本上就是GLib g_get_tmp_dir()函数所做的事情,只是可能顺序不同。

当然,如果您想使用特定于应用程序的环境变量,您可以将其放在其他变量之前,如下所示:

const char *getTmpDir (void) {
    char *tmpdir;

    if ((tmpdir = getenv ("XYZZY_TMP")) != NULL)   return tmpdir;
    if ((tmpdir = getenv ("TEMP")) != NULL)        return tmpdir;
    if ((tmpdir = getenv ("TMP")) != NULL)         return tmpdir;
    if ((tmpdir = getenv ("TMPDIR")) != NULL)      return tmpdir;

    return "/tmp";
}

甚至可以去掉一些或全部的“标准”路径。但是,如果用户没有配置任何路径,则您应该基本上始终回退到/tmp


是的,这就是我期望的。我想通过gtk或glib以编程方式获取该路径,无论哪种方法都可行。 - boom
2
错误,你不必以编程方式理解它。它是 /tmp。除了那些虐待狂的管理员之外,它总是 /tmp。如果你在使用 C 语言编写代码:char *tmpdir = "/tmp"; 就可以了 :-) 你可以影响某些应用程序(例如 bash 中的 TMPDIR 变量),但如果 /tmp 不存在,很多东西都会出问题。 - paxdiablo

3
我查看了Python是如何完成这个任务的(链接),似乎没有特定的UNIX接口来完成此操作。它们只是按顺序尝试以下方法:
  1. 环境变量TMPDIR,TEMP和TMP
  2. /tmp
  3. /var/tmp
  4. /usr/tmp
考虑到Python是由比我聪明得多的人编写的,我打赌这很可能是您能做的最好的事情。

3

0

有一个环境变量TMPDIR,可以设置临时目录的位置,大多数程序都会尊重它,如果没有设置,它将默认为/tmp(或/var/tmp)


0

从命令行:

$ tempfile | xargs dirname
/tmp
$ TMPDIR="/mnt/tmp" tempfile | xargs dirname
/mnt/tmp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接