tmpfile.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 49 行
C
49 行
/* * pANS stdio -- tmpfile * * Bug: contains a critical section. Two executions by the same * user could interleave as follows, both yielding the same file: * access fails * access fails * fopen succeeds * fopen succeeds * unlink succeeds * unlink fails * As I read the pANS, this can't reasonably use tmpnam to generate * the name, so that code is duplicated. */#include "iolib.h"static char tmpsmade[FOPEN_MAX][L_tmpnam+1];static int ntmps = 0;static void rmtmps(void);FILE *tmpfile(void){ FILE *f; static char name[]="/tmp/tf0000000000000"; char *p; while(access(name, 0)==0){ p=name+7; while(*p=='9') *p++='0'; if(*p=='\0') return NULL; ++*p; } f=fopen(name, "wb+"); if(f && ntmps<FOPEN_MAX){ if(ntmps==0) atexit(rmtmps); strcpy(tmpsmade[ntmps++], name); } return f;}static voidrmtmps(void){ int i; for(i=0; i<ntmps; i++) remove(tmpsmade[i]);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?