动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.C语言函数说明与返回值.
.任意角度图片旋转.
.Visual C++/MFC入门教程(四.
.C++的中抽象.
.汉字行编辑程序.
.如何单步执行外部程序.
.高质量C++/C编程指南 --&nb.
.关于编程风格的讨论.
.C++ Builder 控制窗体.
.在DBGrid中可选中行而又可进入编.
.怎样编制黑白棋(4).
.C++编程技巧(二).
.在C++中的ODBC API数据库编程.
.C语言编程常见问题解答之位(bit).
.MSComm控件使用详解.
.C++ STL编程轻松入门.
.软件编码规范.
.用C++Builder设计动态网页按钮.
.巧妙保证程序只有一个实例打开.
.如何编写用TCP/IP的通讯程序.

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

发表日期:2008-3-8 |


/******************************************************************
*本文首发于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;
}


tmpfile函数
    假如您使用C library I/O函数,并且并没有另一个程序使用这个临时文件(笔者注:按我的理解是在同一进程或具有父子关系的进程组中),有个更简洁的函数——tmpfile。tmpfile函数创建并打开一个临时文件,并且自动执行了unlink了这个临时文件。tmpfile函数返回一个文件描述符,假如执行失败返回NULL。当程序执行了fclose或者退出时,资源被释放。
    linux系统中还提供mktemp、 tmpnam、 和tempnam等函数,但是由于健壮性和安全方面理由不建议使用他们。
更多文章 更多内容请看C/C++进阶技术文档  C++编程  Linux文件相关文章专题,或
上一篇:在C++程序中添加逻辑流程控制 人气:347
下一篇:C++中对浮点数的格式化显示 人气:488
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-9-5 AyWeb企业网站管理系统 v2.3 bui
2008-9-5 美女写真小偷程序联盟 v3.0 buil
2008-9-5 老Y文章管理系统 v2.1
2008-9-5 SiteDynamic企业网站管理系统 v1
2008-9-5 MyCOM企业网站管理系统 v1.0 Bui
2008-9-5 乐风CMS影视版 2008
2008-9-5 幻影电影视频系统TvsCms v1.3 伪
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号