利用文件锁控制程序的执行
来源:互联网 发布:java敲代码 编辑:程序博客网 时间:2024/06/08 14:25
我们在写程序的时候,需要同步控制的时候往往利用线程锁对程序进行加锁控制,哈哈,昨天看《UNIX网络编程》,里面提到对程序可以利用文件锁进行程序控制,觉得挺有意思,就拿过来试试。
首先,我们需要知道一个库函数和一个结构体:fcntl,struct flock,没错,函数的意思就是文件控制,结构体的意思是文件锁结构。由于,之前看到过这两个东西,网上的介绍也很多,在这里就不多做介绍了,不懂的同学百度或者谷歌一下吧,在这里,提供一段测试程序,加锁,解锁的思想来自《Unix 网络编程》
/*利用文件给程序加锁*/#include <unistd.h>#include <sys/file.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>static struct flock lock_it, unlock_it;static int lock_fd = -1;void dlut_lock_init(char *);void dlut_lock_wait();void dlut_lock_release();int main(int argc, char **argv, char **environ){dlut_lock_init("test.XXXXXX");dlut_lock_wait();if (!fork()){dlut_lock_wait();printf("hello, this is child %d\n", getpid());sleep(3);dlut_lock_release();exit(0);}printf("hello, this is parent %d\n", getpid());dlut_lock_release();sleep(1);return 0;}void dlut_lock_init(char *path_name){char lock_file[1024];char file_name[1024];strcpy(lock_file, path_name);strcpy(file_name, mktemp(lock_file));lock_fd = open(file_name, O_RDWR | O_CREAT, 0666);unlink(lock_file);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 dlut_lock_wait(){int rc;while ((rc = fcntl(lock_fd, F_SETLKW, &lock_it)) < 0){if (errno == EINTR)continue;else{perror("fcntl error...");exit(1);}}return;}void dlut_lock_release(){if (fcntl(lock_fd, F_SETLKW, &unlock_it)){perror("fcntl error");exit(2);}return;}
我的意思是,父进程首先获取文件锁,之后打印一行字,接着子进程才能打印一行字。
1 0
- 利用文件锁控制程序的执行
- 利用事件 控制程序运行
- 如何使用事务控制程序执行
- qt 利用qml编写控制程序
- 利用cmd执行java文件报NoClassDefFoundError这样的错误。
- java利用ibatis的ScriptRunner执行sql文件
- springBoot 怎么利用maven 创建可以执行的jar文件?
- 利用PHP执行.SQL文件
- 利用php执行sql文件
- java通过线程控制程序执行超时_hanCSDN_20130815
- ch2:栈溢出,控制程序执行流程
- 控制程序运行实例的个数
- WindowsXP音量控制程序的安装
- 【组件】控制程序的过期时间
- 基于短信的手机控制程序
- 基于短信的手机控制程序
- 机器人控制程序的配置问题
- 解析JS控制程序的流程
- highcharts学习
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
- libcurl中curl_easy_setopt()和curl_easy_perform()函数使用中文详解
- windows 线程同步的4种方法
- java android的http请求。
- 利用文件锁控制程序的执行
- SSL协议的分析及实现
- The connection to adb is down, and a severe error has occured.
- javap 命令学习笔记一
- Mean Shift Tracking: 2000-2012回顾
- Ubuntu软件源
- openfire文件传输-xmpp
- 导航栏滚动到顶部后固定
- Filter简介