荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: FreeBSD (FreeBSD), 信区: Linux
标 题: 容易忽视的函数和调用(六)-- mktmp(zz)
发信站: BBS 荔园晨风站 (Sat Jan 8 17:52:37 2000), 站内信件
【 以下文字转载自 FreeBSD 的信箱 】
【 原文由 liugang.bbs@melon.gznet.edu.cn 所发表 】
发信人: cpu (奔腾的心), 信区: Solaris
标 题: 容易忽视的函数和调用(六)-- mktmp(zz)
发信站: 华南网木棉站 (Mon Apr 12 19:14:21 1999), 转信
NAME
mktemp - make a unique file name
SYNOPSIS
#include <stdlib.h>
char *mktemp(char *template);
mktemp,就是创建一个唯一的文件名,这个文件名是干什么的呢?一般是个临时文件,
一般是用来作为锁文件的。那么参数template是什么?是用户所需要的临时文件名的
模板,这个模板一般是由一个文件名后跟六个“X”字符,mktemp会把这六个“X”替
换成六个数字,保证处理过的template是唯一的文件名字,然后返回template指针。
比如模板:"/tmp/mytempfile.XXXXXX" 可能被处理成 "/tmp/mytempfile.123456",
处理过的这个文件名在文件系统中肯定是唯一的。
具体应用?我在《unix network programing》里面摘了一段例子,可以给进程间需要
互斥使用的资源加锁,用fcntl实现。用fcntl实现的锁有个好处:当进程因为意外而
当掉(比如收到某些信号)的时候可以自动释放锁,这个比SYSTEM V的semaphore安全
多了,不会因为持有资源的进程当掉后因为没释放锁而让其它进程干瞪眼。
ok,下面就是原码:
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
struct flock lock_it, unlock_it;
int lock_fd = -1;
void my_lock_init(char *pathname)
{
char lock_file[64];
strncpy(lock_file, pathname, sizeof(lock_file));
lock_file[sizeof(lock_file) - 1] = '\0';
if (mktemp(lock_file) == NULL) {
perror("mktemp");
exit(-1);
}
if ((lock_fd = open(lock_file, O_CREAT | O_WRONLY, 0600)) < 0) {
perror("open lock file");
exit(-1);
}
unlink(lock_file); /* unlink 不影响文件打开状态,也省却了某些
* 好事者看见锁文件就妄图删除之为快 */
lock_it.l_type = F_WRLCK;
lock_it.l_whence = SEEK_SET;
lock_it.l_start = 0;
lock_it.l_len = 0;
unlock_it.l_type = F_UNLCK;
unlock_it.l_whence = SEEK_SET;
unlock_it.l_start = 0;
unlock_it.l_len = 0;
}
void my_lock( )
{
while (fcntl(lock_fd, F_SETLKW, &lock_it) < 0) {
if (errno == EINTR)
continue;
else {
perror("fcntl lock");
exit(-1);
}
}
}
void my_unlock( )
{
if (fcntl(lock_fd, F_SETLKW, &unlock_it) < 0) {
perror("fcntl lock");
exit(-1);
}
}
--
────────────────────────────────────────
假如你看我有点累 █████ █████ █ █
就请你给我倒碗水 █ █ █ █ █
假如你已经爱上我 █ █████ █ █
就请你吻我的嘴 █ █ █ █
█████ █ █████
※ 修改:.xh 于 Jan 5 15:33:45 修改本文.[FROM: 202.38.248.62]
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.96.190.5]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 210.39.3.50]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 210.39.3.71]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店