Linux 版 (精华区)
发信人: tcpip (偶的昵称改了), 信区: Linux
标 题: 容易忽视的函数和调用(六)-- mktmp cpu
发信站: 哈工大紫丁香 (Wed Jan 5 16:44:29 2000), 转信
发信人: cpu (奔腾的心), 信区: Solaris
标 题: 容易忽视的函数和调用(六)-- mktmp cpu
发信站: 华南网木棉站 (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: 202.118.239.10]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.157毫秒