当前位置: 首页 > news >正文

Linux创建临时文件mkstemp()tmpfile()

有些程序需要创建一些临时文件,仅供其在运行期间使用,程序终止后即行删除。

很多编译器程序会在编译过程中创建临时文件。GNU C 语言函数库为此而提供了一系列库函数。(之所以有“一系列”的库函数,部分原因是由于这些函数分别继承自各种 UNIX 实现。)本节将介绍其中的两个函数:mkstemp()和 tmpfile()。

基于调用者提供的模板,mkstemp()函数生成一个唯一文件名并打开该文件,返回一个可用于 I/O 调用的文件描述符。

#include <stdlib.h>
int mkstemp(char* template);//路径

模板参数采用路径名形式,其中最后 6 个字符必须为 XXXXXX。这 6 个字符将被替换,以保证文件名的唯一性,且修改后的字符串将通过 template 参数传回。因为会对传入的 template 参数进行修改,所以必须将其指定为字符数组,而非字符串常量。

文件拥有者对 mkstemp()函数建立的文件拥有读写权限(其他用户则没有任何操作权限),且打开文件时使用了 O_EXCL 标志,以保证调用者以独占方式访问文件。

通常,打开临时文件不久,程序就会使用 unlink 系统调用将其删除。故而,
mkstemp()函数的示例代码如下所示:

image-20231025171812178

使用 tmpnam()、tempnam()和 mktemp()函数也能生成唯一的文件名。然而,由于这会导致应用程序出现安全漏洞,应当避免使用这些函数。

tmpfile()函数会创建一个名称唯一的临时文件,并以读写方式将其打开。(打开该文件时使用了 O_EXCL 标志,以防一个可能性极小的冲突,即另一个进程已经创建了一个同名文件。)

#include <stdio.h>
FILE* tmpfile(void);

tmpfile()函数执行成功,将返回一个文件流供 stdio 库函数使用。文件流关闭后将自动删除临时文件。为达到这一目的,tmpfile()函数会在打开文件后,从内部立即调用 unlink()来删除该文件名。

http://www.lryc.cn/news/205746.html

相关文章:

  • js的节流和防抖详解
  • 基于SpringBoot的水果销售网站
  • vue2进阶学习知识汇总
  • SQL SERVER连接oracle数据库几种方法
  • 存储优化知识复习三详细版解析
  • HotReload for unity支持的代码修改
  • 写一个呼吸灯要几行代码?
  • Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART
  • LeetCode88——合并两个有序数组
  • C++ BinarySercahTree recursion version
  • 兑换码生成与解析-个人笔记(java)
  • 2023/10/25MySQL学习
  • 网络协议--Ping程序
  • 如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序
  • JAVA排序
  • opencalib中lidar2camera安装记录
  • 整个自动驾驶小车001:概述
  • windows本地搭建mmlspark分布式机器平台流程
  • 深入探究 Next.js 中的 getServerSideProps 和 getStaticProps 用法及区别
  • 餐饮业如何高效经营?赶紧闭眼抄这个方法!
  • 餐饮外卖小程序商城的作用是什么
  • nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植
  • 电厂数据可视化三维大屏展示平台加强企业安全防范
  • 2246: 【区赛】【宁波32届小学生】最佳交换
  • Java面试记录
  • 【数据库】聚集函数
  • 【单元测试】--编写单元测试
  • ES(elasticsearch) - 三种姿势进行分页查询
  • AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析
  • 【数据库】函数处理(文本处理函数、日期和时间处理函数、数值处理函数)