欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常用函数

程序员文章站 2022-03-04 16:15:57
...

lseek()

文件偏移:

Linux中可使用系统函数lseek来修改文件偏移量(读写位置)
每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节。但是有一个例外,如果以O_APPEND方式打开,每次写操作都会在文件末尾追加数据,然后将读写位置移到新的文件末尾。lseek和标准I/O库的fseek函数类似,可以移动当前读写位置(或者叫偏移量)。
回忆fseek的作用及常用参数。SEEK_SET、SEEK_CUR、SEEK_END 
int fseek(FILE *stream, long offset, int whence); 
成功返回0;失败返回-1
特别的:超出文件末尾位置返回0;往回超出文件头位置,返回-1
off_t lseek(int fd, off_t offset, int whence);失败返回-1;成功:返回的值是较文件起始位置向后的偏移量。
特别的:lseek允许超过文件结尾设置偏移量,文件会因此被拓展。
注意文件“读”和“写”使用同一偏移位置。

lseek常用应用:

1)更改文件偏移位(read write同时操作同一文件时)
2)使用lseek拓展文件:write操作才能实质性的拓展文件。单lseek是不能进行拓展的。
一般:write(fd, "a", 1);
	od -tcx filename  查看文件的 16 进制表示形式      
	od -tcd filename  查看文件的 10 进制表示形式  

3)通过lseek获取文件的大小:lseek(fd, 0, SEEK_END); 
注意:lseek函数返回的偏移量总是相对于文件头而言。

fcntl()

改变一个“已经打开”的文件的访问控制属性。
重点掌握两个参数的使用,F_GETFL和F_SETFL。

int flag = fcntl(cfd, F_GETFL);

flag |= O_NONBLOCK;

fcntl(cfd, F_SETFL, flag);
//这三句等效于 fcnl(cfd, F_GETFL);

F_SETFL,F_GETFL设置文件读写模式

fork()常用函数

pid_t 类型表示进程 ID,但为了表示-1,它是有符号整型。(0 不是有效进程 ID, init 最小,为1)

注意返回值:不是 fork 函数能返回两个值,而是 fork 后,fork 函数变为两个,父子需各自返回一个。子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。