第三章 进程控制 3.1.4 fork、文件和数据
来源:互联网 发布:那个房产软件好 编辑:程序博客网 时间:2024/05/16 11:52
- 看下面的程序:
- 在当前文件夹下新建了一个data.txt 文件,里面的字符数多于20,看下运行的结果:可以看出在父进程中打开的文件指针,在子进程中还是能用的,而且是公用的。
- 首先是 lseek( ) 函数:
头文件:
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾。 当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置。参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。
参数 whence 可以为:
SEEK_SET 参数offset 即为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset 个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量。
当whence 值为 SEEK_CUR 或 SEEK_END 时, 参数offet 允许负值的出现。
SEEK_SET、SEEK_CUR 和 SEEK_END 是 System V 引入的,在这之前使用的是 0、1 和 2。
返回值:当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno 会存放错误代码。
所以,也就能理解上面的函数:
if((pos = lseek(fildes, 0L, 1)) < 0L) {
...
}
其中的 fildes 是已打开的文件描述,使用 open( ) 函数调用得到的。上面的 lseek 函数的第三个形参为 1 ,其实就是 SEEK_CUR ,表示 lseek 函数会以目前打开的文件指向的文件头为基准,偏移 +0 位。
- read( ) 函数:从某个已打开的文件中读取一定数量的字符,然后将这些字符放入某一个预存的缓冲区内,供以后使用。
头文件:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
函数说明:read( )会把参数 fd 所指的文件传送 count 个字节到 buf 指针所指的内存中。 若参数count 为0, 则read()不会有作用并返回0。返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
所以上面的程序中的
read( fd, buf, 10) 也就好理解了。
========
参考链接:
C语言lseek()函数:移动文件的读写位置
http://c.biancheng.net/cpp/html/236.html
lseek函数的用法
http://blog.csdn.net/songyang516/article/details/6779950
C语言read()函数:读文件函数(由已打开的文件读取数据)
http://c.biancheng.net/cpp/html/239.html
0 0
- 第三章 进程控制 3.1.4 fork、文件和数据
- 第三章 进程描述和控制
- 进程控制(fork和exit)
- 第八章 进程控制 fork函数
- fork进程控制
- linux 进程控制 fork
- Unix进程控制之1---fork和vfork函数
- 进程控制之fork函数
- linux进程控制-fork()
- 进程控制のfork()
- 第8章(1) 进程控制 -fork函数
- 第三章 进程控制 3.1.3 exec系统调用2
- 第三章 进程控制 3.1.3 exec系统调用3
- 进程控制-进程创建(fork、vfork)
- 9.fork函数和父子进程共享文件
- 第三章 表空间、数据文件和控制文件
- Linux进程控制-fork函数-进程控制执行
- 进程控制1--fork vfork函数
- vim快速删除或复制字符串
- 阿里云centos 7安装mysql出现conflicts with file from package mariadb-libs-1:5.5.44-2.el7.centos.x86_64错误
- MyBatis资料整理
- 远程桌面可以远程,ping 不通
- IOS中SVN-CornerStone上传静态库(.a文件)
- 第三章 进程控制 3.1.4 fork、文件和数据
- HDU 2141 Can you find it?
- js之跑马灯
- Mac OS X 11中的/usr/bin 的“Operation not permitted”
- Vs2015+Qt5.8中uic,moc错误解决办法
- 33.启动流程,模块管理与 Loader
- weblogic fmw_12.2.1.0.0_wls下载及安装教程
- 静态类
- POJ 2828 Buy Tickets 线段树 倒序插入 节点空位预留(思路巧妙)