Linux操作临时文件

简介:

使用临时文件要考虑几个问题:

  1. 保证临时文件间的文件名不互助冲突。
  2. 保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。

Linux中提供了mkstemp 和 tmpfile 函数来处理临时文件。

mkstemp函数

int mkstemp(char *template);

mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户才能访问这个临时文件,并进行读、写操作。mkstemp函数只有一个参数,这个参数是个以“XXXXXX”结尾的非空字符串。mkstemp函数会用随机产生的字符串替换“XXXXXX”,保证了文件名的唯一性。 函数返回一个文件描述符,如果执行失败返回-1。在glibc 2.0.6 以及更早的glibc库中这个文件的访问权限是0666,glibc 2.0.7以后的库这个文件的访问权限是0600。

临时文件使用完成后应及时删除,否则临时文件目录会塞满垃圾。由于mkstemp函数创建的临时文件不能自动删除,所以执行完mkstemp函数后要调用unlink函数,unlink函数删除文件的目录入口,但临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。

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

int write_temp_file(char* buffer,size_t length) {
int len=length;
char filename_template[]="/tmp/temp_file.XXXXXX";
int fd=mkstemp(filename_template);
unlink(filename_template);//Unlink the file, so it'll be removed when close
printf("Template file name:%s\n",filename_template);
write(fd,&len,sizeof(len));
write(fd,buffer,len);
return fd;
}

char* read_temp_file(int fd, size_t* length) {
char* buffer;
lseek(fd,0,SEEK_SET);
read(fd,length,sizeof(size_t));
buffer=(char*)malloc(*length);
read(fd,buffer,*length);
close(fd); // Temp file will be deleted
return buffer;
}

int main(int argc, char** argv) {
char buffer[]="Test template files";
int fd=write_temp_file(buffer,strlen(buffer));
int len=0;
char* result=read_temp_file(fd,&len);
printf("Len:%d\nContent:%s\n",len,result);
free(result);
return 0;
}

tmpfile函数

如果您使用C library I/O函数,并且并没有另一个程序使用这个临时文件,有个更简洁的函数——tmpfile。tmpfile函数创建并打开一个临时文件,并且自动执行了unlink。tmpfile函数返回一个文件描述符,如果执行失败返回NULL。当程序执行了fclose或者退出时,资源被释放。

另外,linux系统中还提供mktemp、 tmpnam、 和tempnam等函数,但是由于健壮性和安全性的问题,不建议使用。


本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2011/06/11/2078483.html,如需转载请自行联系原作者


相关文章
|
22天前
|
安全 Linux
Linux通配符及其在文件搜索和管理中的应用
Linux通配符及其在文件搜索和管理中的应用
|
21天前
|
Linux
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
Linux部署04-ls命令的参数和选项,主体,参数,选项,ls / 查看根目录下的文件夹,-a的意思是列出全部选项 ls -a home全部文件,.代表着隐藏的文件夹,-l 选项,以列表竖向的形式展
|
9天前
|
存储 Linux 数据库
|
19小时前
|
算法 Linux
Linux文件分片、重组
Linux文件分片、重组
|
8天前
|
存储 Linux 数据库
Linux 如何快速查找文件?
Linux 如何快速查找文件?
27 6
|
12天前
|
存储 运维 安全
Linux命令stat:深入了解文件与文件系统状态
`stat`命令在Linux中用于显示文件和文件系统的详细状态,包括权限、大小、时间戳等。它通过读取inode获取信息,特点是显示全面、易用且支持多种参数,如`-c`自定义格式,`-f`查看文件系统状态,`-L`处理符号链接。例如,`stat example.txt`显示文件详情,`stat -c &quot;%n 的大小是 %s 字节&quot; example.txt`输出文件大小。理解`stat`有助于系统管理和故障排查。
|
9天前
|
存储 运维 Linux
Linux磁盘精准缩容:操作详解与技巧
在Linux系统管理中,有效的磁盘空间优化对于维护系统性能至关重要。本文将深入探讨如何在Linux环境下安全地进行磁盘缩容,帮助你合理调整存储资源,确保系统高效运行。跟随本篇的步骤,一起优化你的Linux系统磁盘空间!
|
15天前
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
28 0
|
22天前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
|
25天前
|
存储 Linux
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
23 1