文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++在linux下使用c语言操作临时文件
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
·TCP/IP网络重复型服务器通信软件的设计
·DirectX游戏开发入门
·经典与现代的结合:在MFC中集成RAD .NET框架
·Windows API-GDI入门基础知识详解(2)
·Visual C++ 入门精解
·C#基础概念二十五问
·用C#实现pdf文件的完整性验证
·成为嵌入式程序员应知道的0x10个问题
·TCP/IP编程实现远程文件传输
·几个C#编程的小技巧
热点TOP10
·学生成绩管理系统实习
·C#编写的windows计算器-源代码
·socket编程原理
·飞机订票系统设计
·C/C++笔试、面试题目大汇总
·TCP/IP编程实现远程文件传输
·Visual C++ 实现数字化图像的分割
·C语言图形函数
·C#基础概念二十五问
·改编 的 C版 职工管理系统
·C语言的常用库函数使用方法分析及用途
·用C语言实现Ping程序功能
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·C# GridView 排序及分页
·进程调度模拟程序
·Windows下C语言网络编程快速入门
·通讯录的源代码(用链表实现)
·DirectX游戏开发入门
·在Visual Studio.NET中使用Crystal Report(上)
·asp.net中调用javascript函数实现多功能日期控件示例

在linux下使用c语言操作临时文件

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]


/******************************************************************
*本文首发于bbs.bluegem.org的CWorld区
*本人email:chenfei@sohu.com
*如转载本文,请保留首发地和本人联络方式,以方便交流,
谢谢!
******************************************************************/ 
    有时程序需要存储很大量的数据,或者在几个进程间交换数据,这时您可能考虑到使用临时文件。使用临时文件要考虑几个问题:
1、保证临时文件间的文件名不互助冲突。
2、保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。
所以在linux下有专门处理临时文件的函数
mkstemp函数
    mkstemp函数将在系统中以独一无二的文件名创建一个文件并打开,而且只有当前用户才有访问这个临时文件的权限,当前用户对这个临时文件可以打开并进行读、写操作。mkstemp函数只有一个参数,这个参数是个以“XXXXXX”结尾的非空字符串。mkstemp函数会用随机产生的字符串替换“XXXXXX”,保证了文件名的唯一性。函数返回一个文件描述符,如果执行失败返回-1。在glibc 2.0.6 以及更早的glibc库中这个文件的访问权限是0666 ,glibc 2.0.7 以后的库这个文件的访问权限是0600。
    当临时文件完成她的使命如果不把它清除干净把或者程序由于意外在临时文件被清除前就已经退出,临时文件所在的目录会塞满垃圾。由于mkstemp函数创建的临时文件不能自动删除(请参考下文中的tmpfile函数)。执行完mkstemp函数后要调用unlink函数,unlink函数删除文件的目录入口,所以临时文件还可以通过文件描述符进行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文件被自动彻底地删除。
例程:
直接使用advanced linux programming的例程,只把注释翻译一下
#include <stdlib.h>
#include <unistd.h>
/* A handle for a temporary file created with write_temp_file. In
this implementation, it’s just a file descriptor. */
/*write_temp_file是个操作临时文件的句柄,本例中只是个文件描述符*/
typedef int temp_file_handle;
/* Writes LENGTH bytes from BUFFER into a temporary file. The
temporary file is immediately unlinked. Returns a handle to the
temporary file. */
/*在这函数从BUFFER中向临时文件写入LENGTH字节数据。临时文件在刚一创建就被删除掉。函数会返回临时文件的句柄。*/
temp_file_handle write_temp_file (char* buffer, size_t length)
{
/* Create the filename and file. The XXXXXX will be replaced with
 characters that make the filename unique. */
/*新建文件名和文件,文件名中的XXXXXX将被随机字符串代替,以保证文件名在系统中的唯一性*/
 char temp_filename[] = “/tmp/temp_file.XXXXXX”;
 int fd = mkstemp (temp_filename);
 /* Unlink the file immediately, so that it will be removed when the
 file descriptor is closed. */
 /*文件立刻被unlink,这样只要文件描述符一关闭文件就会被自动删除*/
 unlink (temp_filename);
 /* Write the number of bytes to the file first. */
 /*首先写入即将写入数据的长度*/
 write (fd, &length, sizeof (length));
 /* Now write the data itself. */
 /*写入数据本身*/
 write (fd, buffer, length);
 /* Use the file descriptor as the handle for the temporary file. */
 /*函数返回文件描述符,作为临时文件的句柄*/
 return fd;
}
/* Reads the contents of a temporary file TEMP_FILE created with
write_temp_file. The return value is a newly allocated buffer of
those contents, which the caller must deallocate with free.
*LENGTH is set to the size of the contents, in bytes. The
temporary file is removed. */
/*从被write_temp_file创建的临时文件中读取数据。返回值是含有文件内容的新申请到的内存块,这块内存应该又调用read_temp_file者释放。
*length是临时文件正文内容的长度。执行完read_temp_file函数后临时文件被彻底删除*/
char* read_temp_file (temp_file_handle temp_file, size_t* length)
{
 char* buffer;
 /* The TEMP_FILE handle is a file descriptor to the temporary file. */
 /*fd是访问临时文件的文件描述符*/
 int fd = temp_file;
 /* Rewind to the beginning of the file. */
 /*把文件指针指向文件开头*/
 lseek (fd, 0, SEEK_SET);
 /* Read the size of the data in the temporary file. */
 /*获得临时文件正文长度*/
 read (fd, length, sizeof (*length));
 /* Allocate a buffer and read the data. */
 /*分配内存块,读取数据*/
 buffer = (char*) malloc (*length);
 read (fd, buffer, *length);
 /* Close the file descriptor, which will cause the temporary file to
 go away. */
 /*关闭文件描述符,临时文件被彻底删除*/
 close (fd);
 return buffer;
}

[1] [2] 下一页 




上一篇:C++中对浮点数的格式化显示

下一篇:C语言的常用库函数使用方法分析及用途

在linux下使用c语言操作临时文件 相关文章:
·GHOST使用方法(图解)
·操作电脑最忌的十八个小动作
·Vista系统使用技巧总结
·为什么iexplore.exe在打开网页时CPU使用会100%?
·MPEG、RM、WMV电影文件格式转换指南
·苹果操作系统精选
·QQ空间导航代码最新版使用方法
·DataTable控件的使用
·快马加鞭 20秒进入Win XP操作系统
·《人工少女2》操作指南 - 游戏手册
在linux下使用c语言操作临时文件 相关软件:
·黑客视频教程 VMware虚拟机的安装和使用
·黑客视频教程-灰鸽子远控使用教程
·C语言程序设计
·C语言库函数速查
·FLASH 8中文使用手册
·使用GPMC随心所欲管理组策略
·Adobe Photoshop CS 2 简体中文使用指南
·Windows环境下32位汇编语言程序设计
·鸟哥的linux私房菜:基础学习篇
·电脑上网实用操作教程

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn