常用函数
程序员文章站
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号不同。