tmpfile_s (File input/output) – C 中文开发手册

[
  •   C 语言中文开发手册

    tmpfile_s (File input/output) - C 中文开发手册

    在头文件<stdio.h>中定义
    FILE * tmpfile(void); (1)
    errno_t tmpfile_s(FILE * restrict * restrict streamptr); (2) (自C11以来)

    1)创建并打开一个临时文件。打开文件作为更新二进制文件(如如果由fopen与"wb+"模式)。该文件的文件名在文件系统中保证是唯一的。至少TMP_MAX文件可能在程序生命周期中打开(此限制可能会与之共享tmpnam并可能会受到进一步限制FOPEN_MAX)。2)与(1)相同,只是至少TMP_MAX_S可以打开文件(可以共享限制tmpnam_s),如果streamptr是空指针,则调用当前安装的约束处理程序函数。作为所有的边界检查函数,tmpfile_s只能保证__STDC_LIB_EXT1__是由实现定义的,并且如果用户在包含之前定义__STDC_WANT_LIB_EXT1__为整数常量。1<stdio.h>当程序正常退出时,由该函数创建的临时文件将被关闭并删除。它是否被异常终止删除是实现定义的。

    参数

    1)(无) 2)指向将由该函数调用更新的指针

    返回值

    1)如果发生错误,指向与文件或空指针关联的文件流。2)如果文件被创建并成功打开,则为零;如果文件未被创建或打开,或者如果streamptr是空指针,则为非零。另外,指向相关文件流的指针会*streamptr成功存储,并且空*streamptr错误指针值将被存储。

    注意

    在某些实现中(例如Linux),该函数实际上创建,打开并立即从文件系统中删除该文件:只要程序拥有对已删除文件的打开文件描述符,该文件就存在,但由于它是已删除,其名称不会出现在任何目录中,以便其他进程不能打开它。一旦文件描述符关闭,或一旦程序终止(正常或异常),文件占用的空间就会被文件系统回收。在某些实现(例如Windows)上,需要提升权限,因为该函数可能会在系统目录中创建临时文件。

    #define _POSIX_C_SOURCE 200112L
    #include <stdio.h>
    #include <stdio.h>
    #include <unistd.h>
    int main(void)
    {
        FILE* tmpf = tmpfile();
        fputs("Hello, world", tmpf);
        rewind(tmpf);
        char buf[6];
        fgets(buf, sizeof buf, tmpf);
        printf("got back from the file: '%s'\n", buf);
     
        // Linux-specific method to display the tmpfile name
        char fname[FILENAME_MAX], link[FILENAME_MAX] = {0};
        sprintf(fname, "/proc/self/fd/%d", fileno(tmpf));
        if(readlink(fname, link, sizeof link - 1) > 0)
            printf("File name: %s\n", link);
    }

    可能的输出:

    got back from the file: 'Hello'
    File name: /tmp/tmpfjptPe5 (deleted)

    参考

    C11标准(ISO / IEC 9899:2011): 7.21.4.3 tmpfile函数(p:303) K.3.5.1.1 tmpfile_s函数(p:586-587) C99标准(ISO / IEC 9899:1999): 7.19.4.3 tmpfile函数(p:269) C89 / C90标准(ISO / IEC 9899:1990): 4.9.4.3 tmpfile函数

  •   C 语言中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/c-3/28165.html

    posted on 2020-07-10 21:23  MrAit  阅读(275)  评论(0编辑  收藏  举报

    导航