unix c 05
dup和dup2用于复制文件描述符,区别在于dup2可以指定新的文件描述符的数值,如果新的文件描述符的值已经被使用,dup2会关闭掉后进行复制。
dup和dup2 不会复制文件表,只是文件描述符的复制
移动文件的偏移量(文件指针)的函数是lseek,fseek底层调用的就是lseek.
函数的手册查看方式:第一看参数,第二看返回值,第三看函数的功能。
fcntl函数:
int fcntl(int fd,int cmd,...)
cmd常用的有:
F_DUPFD - 复制文件描述符,和dup2不同的是不会强行关闭已经使用的文件描述符
F_SETFL/F_GETFL - 获取/设置文件状态标记
状态标记和open函数呼应,分为三类:
创建标记 、 权限标记 、 状态标记
创建标记不会被获取,也不能设置
权限标记可以被获取,不能被设置
状态标记都可以(O_APPEDN)
关于文件锁的标记:F_SETLK/F_SETLKW/F_GETLK
经验:
设置状态的时候用 位或| , 判断是否存在用 位与&
文件锁的机制和使用
程序可以启动多进程/多线程进行代码的同时运行(并行),因此 可能出现多个进程/线程同时读写相同文件。
两个进程 同时读 (可以)
两个进程 一读一写 (不可以,会导致脏数据)
两个进程 同时写 (不可行)
如果进程1读,进程2 可读,不可写
如果进程1写,进程2 不可读,也不可写
读写锁解决了这个问题
读写锁内部维护两把锁,一把读锁,一把写锁。
读锁 是 共享锁,允许其他进程读,但不允许写
写锁 是 独占锁,不允许其他进程读写
文件锁是针对文件的某一部分锁定,而不是锁定整个文件。(粒度)
Linux/Unix提供的文件锁:
使用fcntl函数加锁,cmd使用F_SETLK/F_SETLKW加锁。C语言用结构体flock代表文件锁:
struct flock{
short l_type; // 锁的类型
short l_whence;// 锁的起始位置的参照点
int l_start;// 锁的起始位置
int l_len;// 锁定的长度
pid_t l_pid;// 加锁的进程id(只有GETLK有效)
};
l_type有三种:F_RDLCK/F_WRLCK/F_UNLCK(释放锁)
l_whence和l_start 联合可以确定锁定的开始位置,l_len决定了锁定的长度。
l_pid 一般给 -1 即可。
cmd的值:
F_SETLK - 加锁(锁的类型是F_UNLCK时解锁)
F_SETLKW - 加锁
区别:
F_SETLK加锁时,非阻塞,如果锁加不上,直接返回-1;F_SETLKW加锁时,阻塞,如果锁加不上,等待
F_GETLK - 测试一个锁能不能加上(不是取锁)
文件锁只是在进程中做了锁定的标识,并 没有真正的锁定文件,因此文件锁无法限定对文件的读写操作。
文件锁的用法 应该是和read/write结合使用。就是:凡是调用read之前 上读锁,调用write之前上 写锁,这样才能有效果。(fcntl(F_SETLK)函数不会锁定任何东西,但可以与另一个fcntl(F_SETLK) 呼应)
F_GETLK - 测试一个锁能不能加上(不是取锁)
如果能加,不真正加锁,把锁的类型改为F_UNLCK返回,如果不能加锁,返回当前正在使用的锁(原因),并改变pid的值为正在使用的锁的PID。
判断锁能否加上的条件 是 : pid 是否 = -1
一些文件相关的函数:
stat/fstat 可以取得文件相关状态(ls -l)
stat 不需要open
C语言关于时间的表示方法:
1 秒差 time_t 和1970年1月1日 0点0分0秒的秒差
2 结构体 struct tm {年/月/日/时/分/秒}
ctime 可以把 time_t 显示成字符串
access 函数可以 判断文件是否存在
unix c 05的更多相关文章
- awk常用命令
1.统计TCP的连接数量,其中LISTEN多少个,ESTABLISHED多少个. [root@heiniao ~]# netstat -ant Active Internet connections ...
- 《Unix 网络编程》05:TCP C/S 程序示例
TCP客户/服务器程序示例 系列文章导航:<Unix 网络编程>笔记 目标 ECHO-Application 结构如下: graph LR; A[标准输入/输出] --fgets--> ...
- 《UNIX环境高级编程》笔记——1.UNIX基础知识
这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...
- 转: unix实际用户ID和有效用户ID解析
今天在看APUE,这两个问题很难理解,GOOGLE一下,有篇文章总结的不错,看了一下才明白透彻了. 由于用户在UNIX下经常会遇到 SUID.SGID的概念,而且SUID和SGID涉及到系统安全,所以 ...
- UNIX Time 时间戳 与 北京时间 相互转换
typedef struct t_xtime { int year; int month; int day; int hour; int minute; int second; } _xtime ; ...
- Unix/Linux编程实践教程(0:文件、终端、信号)
本来只打算读这本书socket等相关内容,但书写得实在好,还是决定把其余的内容都读一下. 阅读联机帮助的一个示例: open系统调用: read系统调用: Unix的time: 上面的printf可以 ...
- [计算机、网络相关历史]unix简史
本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...
- Cheat (tldr, bropages) - Unix命令用法备忘单
cheat 是一个Unix命令行小工具,用来查询一些常用命令的惯用法(我们都知道,man page阅读起来太累了,常常是跳到最后去看 examples,但并不是所有man pages里面都有examp ...
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
随机推荐
- asp.net 中的错误跳转 customerrors 对html文件不起作用
在配置web.config时发现customerrors对aspx文件是起作用的,我想通过customerrors来判断是否有html文件时,却不起作用? 这是为什么,如果要起作用.net里该如何操作 ...
- xdu_RainAndBow 鞍山打铁记
我们作为弱校xdu的七队(大四一支,大三四支,大二俩),本来都没指望今年可以出去,结果运气不错,学校得到几个激动名额, 于是我们激动地成功申请到了鞍山站的名额,嗯...可以出去旅游了. 不过我们毕竟太 ...
- hdu2795--Billboard
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2795 摘要:有一块尺寸为h*w的矩形长板,要在上面贴1*wi的海报n张,选择贴海报的位置是:尽量高,同一 ...
- Android——LayoutInflater详解
在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater. LayoutInflater在Android中是"扩展& ...
- pyqt托盘例子
# -*- coding: cp936 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtCore, QtGui ...
- JavaScript 滚动页面到指定元素位置
页面评论功能,当评论较多时,有时须要滚动到评论头部. 能够使用scrollTop方法,加上一点延时动画(animate),可訪问在线演示,代码大体例如以下: <html> <scri ...
- AssemblyInfo.cs文件的作用
在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些參数,以下是默认的AssemblyInfo.cs文件的内容详细介绍 //是否符合公共 ...
- BNU10805:矩形神码的
我们都知道,矩形是由两条对角线的,没错吧?(谜之声:这不是显然么!)这两条线的长度也是相等的,没错吧?(谜之声:这不废话么!)然后我们给定一条对角线的起始点和终止点的坐标,然后给定另一个对角线和他的夹 ...
- 老生常谈的Javascript作用域问题
在前端学习中,作用域这个问题一直被广泛提起,什么是作用域,什么又是作用域链?在Javascript中,怎么去理解这些概念都是学好这门语言的关键,所以在学习前端开发的过程中,我需要也很有必要去学习和总结 ...
- javascript构造函数+原形继承+作用域扩充
目前为止我认为这是最佳的声明对象的模式,将今天学到的东西写下 <script type="text/javascript"> function Constructor( ...