当前位置: C语言 -- 附录 -- tmpfile_s

tmpfile_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
errno_t tmpfile_s(FILE * restrict * restrict streamptr);

描述:

该函数创建一个临时二进制文件,该文件不同于任何现有文件;当文件关闭或者程序终止时,该文件会被自动删除。如果程序异常终止,打开的临时文件是否删除将由实现定义。该文件以"wb+"模式打开进行更新;该模式与fopen_s函数中的模式具有相同的语义(包括对独占访问和文件权限的影响。)。

如果文件创建成功,参数streamptr指向的FILE类型指针将被设置为控制打开文件的对象指针;如果不成功,参数streamptr指向的FILE类型指针将被设置为空指针。


运行约束:

参数streamptr不能是空指针。

如果存在运行约束冲突,函数tmpfile_s不会尝试创建文件。


参数:
FILE * restrict * restrict streamptr

指向FILE类型指针的指针。


返回值:

如果临时文件创建成功,函数返回0;如果临时文件创建不成功或者存在运行约束冲突,函数返回一个非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
/*安全函数tmpfile_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define LETTERS 26

int main(void)
{
    FILE *tempFile;
    int ch;
    int count[LETTERS] = {0};
    const char letter[LETTERS] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    /*创建临时文件及其内容。*/
    if(tmpfile_s(&tempFile))
        exit(EXIT_FAILURE);
    
    puts("Input the content of the temporary file:");
    while((ch=getchar()) != '\n')
        fputc(ch, tempFile);

    rewind(tempFile);

    /*统计各字母出现的次数*/
    while((ch=fgetc(tempFile)) != EOF)
    {
        for(int i=0; i<LETTERS; ++i)
        {
            if(toupper(ch) == letter[i])
                ++count[i];
        }
    }

    /*输出统计结果。*/
    puts("The results of statistical analysis:");
    for(int i=0; i<LETTERS; ++i)
    {
        printf_s("%c:%2d  ", letter[i], count[i]);
        if((i+1)%10 == 0)
            printf_s("\n");
    }

    fclose(tempFile);

    return 0;
}


结果:

假设键盘输入为:

You can fool some of the people all of the time, and all of the people some of the time, but you can not fool all of the people all of the time.

将输出:

The results of statistical analysis:

A: 7  B: 1  C: 2  D: 1  E:17  F: 8  G: 0  H: 6  I: 3  J: 0

K: 0  L:13  M: 5  N: 4  O:18  P: 6  Q: 0  R: 0  S: 2  T:11

U: 3  V: 0  W: 0  X: 0  Y: 2  Z: 0

注:使用Visual Studio编译。


相关内容:
tmpnam_s 生成临时文件名的安全函数。