lockf函数的使用
#include<stdio.h>
#include<unistd.h>
void main()
{int p1,p2,i;
while((p1=fork())==-1);//创建子进程p1,这个是一个技巧,直到创建子进程成功为止
if(p1==)
{
lockf(,,);//加锁第一个参数为stdout(标准输出设备描述符)
//printf("child %4d %4d\n",getppid(),getpid(),p1);
for(i=;i<;i++)
printf("daughter%d\n",i);
lockf(,,); }
else{
while((p2=fork())==-);//创建子进程p2
if(p2==){
lockf(,,);//加锁第一个参数为stdout(标准输出设备描述符)
for(i=;i<;i++)
printf("son%d\n",i);
lockf(,,); //解锁
}
else
{lockf(,,);//加锁
for(i=;i<;i++)
printf("parent%d\n",i);
lockf(,,); //解锁 }
} }
/*本实验所涉及的的系统调用lockf(files,function,size),
用作锁定文件的某些段或者整个文件。本函数的头文件为include<unistd.h>
其中file为文件描述符,function是锁定和解锁:1表示锁定,0表示解锁;
size是锁定或者解锁的字节数,为0,表示从文件的当前位置到文件尾。*/
lockf函数的使用的更多相关文章
- GCC,GDB,Makefile和IO复用函数
2015.1.22 c高级的环境搭建:GCC编译器:全称 GNU CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 ...
- UNIX环境高级编程——记录上锁(fcntl函数)以及死锁检测
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数, ...
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK ...
- 高级I/O之记录锁
若两个人同时编辑一个文件,其后果将如何呢?在很多UNIX系统中,该文件的最后状态取决于写该文件的最后一个进程.但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件.为了向进程提供这 ...
- Linux文件(区域)锁函数 -- open()、fcntl()
一.什么是文件锁定 对于锁这个字,大家一定不会陌生,因为我们生活中就存在着大量的锁,它们各个方面发挥着它的作用,现在世界中的锁的功能都可归结为一句话,就是阻止某些人做某些事,例如,门锁就是阻止除了屋主 ...
- fcntl函数加文件锁
对文件加锁是原子性的,可以用于进程间文件操作的同步.在linux下,有三个函数可以对文件进程加锁,分别是fcntl.flock.lockf.这里只说fcntl,它的用法也是最复杂的. fcntl是fi ...
- Linux文件锁学习-flock, lockf, fcntl
参考 linux中fcntl().lockf.flock的区别 这三个函数的作用都是给文件加锁,那它们有什么区别呢? 首先flock和fcntl是系统调用,而lockf是库函数.lockf实际上是f ...
- 进程管理之fork函数
fork函数的定义 #include <unistd.h> #include <sys/types.h> pid_t fork(void); fork函数在父进程中返回子进程的 ...
- 文件锁-fcntl flock lockf
这三个函数的作用都是给文件加锁,那它们有什么区别呢? 首先flock和fcntl是系统调用,而lockf是库函数.lockf实际上是fcntl的封装,所以lockf和fcntl的底层实现是一样的,对文 ...
随机推荐
- xampp下载地址 一个集成的易于安装的WEB环境部署包
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windo ...
- STL栈的应用之表达式求值
#include<iostream> #include<cstring> #include<cstdio> #include<stack> using ...
- python常用代码积累
一.文件操作 1.判断一个目录是否存在,若不存在则创建 if not os.path.isdir(new_path): os.makedirs(new_path) 2.新建一个文件 f=open(&q ...
- python分号使用
一:python分号使用 每一条语句最后个加个分号:这是c,oc,java,php等语言中不可缺少的部分,但是对于python,分号是可加,可不加的 如:不加分号代码 >>> cla ...
- vue常用属性解释。
props:详看 示例-网格组件. props 可以是数组或对象,用于接收来自父组件的数据.props 可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测.自定义校验和设置默认值 ...
- QtGui.QComboBox
The QtGui.QComboBox is a widget that allows a user to choose from a list of options. #!/usr/bin/pyth ...
- Linux平台Boost的编译方法
本博客(http://blog.csdn.net/livelylittlefish)贴出作 者(三二一@小鱼)相关研究.学习内容所做的笔记,欢迎广大朋友指正! Linux平台Boost的编译方法 Bo ...
- ajax提交gb2312的中文,出现乱码
解决方案:
- EF--Code First配置问题
用EntityFramework Reverse POCO Generator工具生成的连接:<add name="Base_dbContext" connectionStr ...
- 用PL/pgSQL写postgreSQL的存储过程[转]
http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...