2011-01-25 9 views

Trả lời

5

Trên hầu hết các hệ thống giống Unix, bạn sẽ tìm kiếm /tmp. Nếu đó không phải là câu trả lời bạn đã làm sau, bạn nên chỉ định trong đó bit của Ubuntu mà bạn đang nói đến.

Một số ứng dụng sẽ cho phép bạn xác định nơi các tập tin tạm thời của họ được đặt (chẳng hạn như với các biến môi trường TMP, TEMP hoặc TMPDIR) nhưng rất nhiều thứ sẽ phá vỡ dưới UNIX nếu /tmp không tồn tại, vì vậy nó an toàn chỉ để sử dụng nó. Nếu bạn muốn làm cho nó cấu hình, trong mã của bạn, bạn muốn sử dụng một cái gì đó giống như chức năng getTmpDir() trong chương trình hoàn chỉnh như sau:

#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; 
} 

mà kết quả đầu ra, trong môi trường Cygwin của tôi (Tôi có cả TEMPTMP thiết lập để giá trị này):

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

Đó là những gì mà cuộc gọi GLib g_get_tmp_dir() thực hiện, mặc dù có thể theo thứ tự khác.

Tất nhiên, nếu bạn muốn sử dụng một biến môi trường ứng dụng cụ thể, bạn có thể đặt rằng trước khi những người khác như sau:

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"; 
} 

Hoặc thậm chí đưa ra một số hoặc tất cả những cái "chuẩn". Nhưng bạn nên khá nhiều luôn luôn rơi trở lại trên /tmp nếu người dùng chưa định cấu hình bất kỳ điều gì.

+0

ya đó là những gì tôi đang mong đợi. Tôi muốn có được con đường đó bằng cách lập trình sử dụng gtk hoặc glib mà bao giờ khả thi. – boom

+2

Err, bạn không cần phải làm cho nó có lập trình. Đó là '/ tmp'. Đó là (quản trị viên tàn bạo bất kể) _always_ '/ tmp'. Nếu bạn đang viết mã trong C: 'char * tmpdir ="/tmp ";' sẽ làm điều đó tốt :-) Bạn có thể ảnh hưởng đến một số ứng dụng nhất định (như biến 'TMPDIR' trong' bash') nhưng rất nhiều thứ sẽ ngắt nếu '/ tmp' không tồn tại. – paxdiablo

0

Có một biến môi trường TMPDIR mà có thể thiết lập vị trí của thư mục tạm thời, hầu hết các chương trình tôn trọng này, nếu nó không được cài đặt nó sẽ mặc định/tmp (hoặc/var/tmp)

3

Tôi nhìn how Python does this và dường như không có giao diện UNIX cụ thể nào để làm như vậy.

Họ chỉ cố gắng, theo thứ tự:

  1. Các biến môi trường TMPDIR, TEMP, và TMP
  2. /tmp
  3. /var/tmp
  4. /usr/tmp

Cho rằng Python là được viết bởi những người thông minh hơn tôi nhiều, tôi sẵn sàng đặt cược đây có lẽ là điều tốt nhất bạn có thể làm.

0

Từ dòng lệnh:

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