C 在Sun Solaris环境中,tmpname函数在哪里写入临时文件?

C 在Sun Solaris环境中,tmpname函数在哪里写入临时文件?,c,gcc,temp,solaris-10,sun,C,Gcc,Temp,Solaris 10,Sun,我在Unix环境中(Sun Ultra 5和gcc v.2.95.3),我试图了解我的编译器在哪里使用tmpnam函数编写临时文件。我知道这部作品不受欢迎,但我的作品只是出于好奇。 我这样做: 我用c运行了这个源代码: #include <stdio.h> #include <stdlib.h> int main(void) { char nomefile[L_tmpnam]; strcpy(nomefile, "my_file.txt");

我在Unix环境中(Sun Ultra 5和gcc v.2.95.3),我试图了解我的编译器在哪里使用tmpnam函数编写临时文件。我知道这部作品不受欢迎,但我的作品只是出于好奇。 我这样做: 我用c运行了这个源代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char nomefile[L_tmpnam];

    strcpy(nomefile, "my_file.txt");
    tmpnam(nomefile);

    getchar();

    return(0);
}
#包括
#包括
内部主(空){
字符文件[L_tmpnam];
strcpy(nomefile,“my_file.txt”);
tmpnam(nomefile);
getchar();
返回(0);
}
在等待按下返回键时,程序应创建一个名为my_file.txt的临时文件(文件系统中的某个位置)。因此,我从另一个终端以这种方式开始搜索(作为超级用户):

find/-name my_file.txt-打印


不幸的是,它没有找到它。然而,在我正在阅读的书中说,这个函数(tmpnam)与tmpfile函数不同,您可以指定临时文件的名称并将其写入文件系统中的某个位置。

识别临时文件写入位置的正确来源如下。正如我在评论中所建议的那样

#include <stdio.h>

int main(void) {
    char buffer[L_tmpnam] = "my_file.txt";
    char *ptr;

    tmpnam(buffer);
    printf("Temporary name 1: %s\n", buffer);

    ptr = tmpnam(NULL);
    printf("Temporary name 2: %s\n", ptr);

    return(0);
}

使用
扫描您的_程序
查看它的功能。顺便说一句:tempfile可能在装载的文件系统中不可见。不幸的是,它给了我一个错误:#strace a.out->错误:无法打开/dev/log。。。我尝试作为超级用户,并给了我另一个错误:错误:跟踪器已经存在…程序应该创建一个临时文件。。。。实际上,
tmpnam
并不创建文件。它使用给定的字符串作为基创建一个唯一的文件名,并返回指向该名称的指针,然后可以将该指针用作临时文件的名称。看起来你没用。您是否在系统上检查了
man-tmpnam
?@wildplasser:Solaris的
strace
命令执行的操作与您预期的不同。用于跟踪系统调用的Solaris命令,类似于Linux的
strace
,被称为
truss
@lower:实际上我认为它不使用字符串作为名称的基础。它从头生成名称并将其存储在给定的缓冲区中,该缓冲区以前的内容将被忽略和覆盖。您可能会想到
tempnam
Temporary name 1: /var/tmp/aaagXay5b
Temporary name 2: /var/tmp/baahXay5b