打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
文件IO。函数dup&dup2&fcntl深入讲解!

看了好几周,终于把apue的文件IO看完了。不管掌握的老不牢固,先在这里总结一下自己这些天的学习经验与收获。

首先是int open()函数,这个函数式打开或者创建一个文件。返回一个文件标示符,(PS: 系统默认运行时有三个文件标识符,0代表STDIN1代表STDOUT2代表ERROR这个很常用的三个,所以我谨记);文件标识符其实就是一个文件指针指向了一些和打开的当前文件有关的文件属性的数据结构。具体open的参数设置大家可以参照apue里面设置。

Int creat()该函数是创建一个文件,返回该文件的标识符。但是这个函数只能创建只写文件,如果要写文件然后读文件的话,我们需要依次调用creat(),clouse(),open()。

Close()函数是关闭一个文件的函数。错误返回-1

Read()   函数是一个成功返回读取字节数的函数。返回0时是已经读到了文件的最末端。

Write()函数是往文件里面写数据的函数。返回值是已写的字节数。他出错的原因有两个。一是所写磁盘已经写满,二是超过了给定进程的文件长度限制。对于文件来说,写操作是从当前文件的offset既是当前偏移量出开始写。

Lseek()函数挺重要的吧。就是设置当前打开文件的偏移量。也就是说我们可以用这个函数来决定我们从文件的哪里开始进行操作。

以上是普通应用,下面我觉得应该是高级的应用了 、

Dupdup2这两个函数是非常有用的。我们可以利用他们来复制了一个完全一样的文件操作符。Dup2()的第二个参数就会完全 复制第一个参数的数据结构,也就是说如下代吗说明:

oldfd=open(“hello”,(O_RDWR|O_CREATE),0666);

dup2oldfd1);

closeoldfd);

这段代码就是说打开一个名为hello的文件我们得到了一个文件描述符oldfd,我们利用dup2复制了一个描述符我们命名为1,然而1是默认的stdout的文件描述符,所以标准3输出的所有内容都会默认的放到hello的文件里面。这个函数通常和管道pipe()函数配合使用。在这里不过多的说明因为本人也没有很好的理解管道的概念。Dup2这个函数基本可以等于

closefiledes2);

fcntlfiledesF_DUPFDfiledes2);

但是区别就是dup2()是一个原子操作,可以避免进程或线程的崩溃。另外fcntl还可以用来 设置一个文件的记录锁。也是很常用的。具体的函数参数的传递我们可以去参阅他们的英文手册。Man 也可以在线的查阅!

   小结:本人十分热爱UNIX。在开源社区看到大家在做的开源项目真的感觉很好。无论以后做什么工作,我也会把UNIX学习到底,作为一种兴趣,更是希望自己也可以能写出好的代码!所以现在要努力的学习。我们大家一起共同努力!不要为了追逐名利的去学习!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux文件描述符
Linux系统环境下关于多进程并发写同一个文件的讨论
UNIX环境编程学习笔记(5)
Linux 下的 dup 和 dup2 函数简介
Unix环境高级编程习题3.2
dup和dup2函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服