LinuxAPI-文件lseek移动光标、creat建立文件、mkstemp建立唯一的临时文件

一、lseek——移动光标操作

1.原函数

表头文件
#include "sys/types.h"
#include "unistd.h"
定义函数
off_t lseek(int fildes, off_t offset, int whence);

函数说明:open打开文件后光标所在的位置是这个文件的读写位置
fildes——文件描述词
offset——根据参数whence来移动光标位置(单位字节)
whence——配置此时光标所在位置
返回值——成功返回目前的读写位置,也就是距离文件开头多少个字节。错误返回-1,errno会存放错误代码。

2.参数取值
whence参数

SEEK_SET 参数offset即为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量。
      当whence 值为SEEK_CURSEEK_END时,参数offet允许负值的出现。
      下列是教特别的使用方式:
      1) 欲将读写位置移到文件开头时:lseek(int fildes,0,SEEK_SET)2) 欲将读写位置移到文件尾时:lseek(int fildes,0,SEEK_END)3) 想要取得目前文件位置时:lseek(int fildes,0,SEEK_CUR)

3.示例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
        int fd = open("filef", O_RDWR | O_CREAT,0600);//打开文件 
        
        int len=lseek(fd,0,SEEK_SET);//光标位置移到文件开头
        printf("len=%d\n",len);//输出距离文件开头字节数
        
        len=lseek(fd,0,SEEK_END);//光标位置移到文件末尾
        printf("len=%d\n",len);//输出距离文件开头字节数

        close(fd);
        return 0;
}

输出结果:len=0
len=12

二、creat建立文件操作

1.原函数

表头文件
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
定义函数
int creat(const char *pathname, mode_t mode);

函数说明 建立一个名为pathname内容的文件,如果原来该文件存在,会将这个文件的长度截短为0(删除此文件)。creat()功能相当于使用下列的调用方式调用open(): open(const
char *pathname, (O_CREAT|O_WRONLY|O_TRUNC));
pathname——指向欲建立的文件路径字符串
mode——此文件的权限
返回值——成功返回新的文件描述词。错误返回-1,并把错误代码设给errno

2.参数取值
mode参数

S_IRWXU 00700用户(文件属主)具有读、写、执行权限
S_IRUSR 00400用户具有读权限
S_IWUSR 00200用户具有写权限
S_IXUSR 00100用户具有执行权限
S_IRWXG 00070组具有读、写、执行权限
S_IRGRP 00040组有读权限
S_IWGRP 00020组有写权限
S_IXGRP 00010组具有execute权限
S_IRWXO 00007其他具有读、写、执行权限
S_IROTH 00004其他用户有读权限
S_IWOTH 00002其他有写权限
S_IXOTH 00001其他具有执行权限

3.示例

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main()
{
        int fd=creat("file",S_IRWXU);//建立名为file的文件,文件的权限为用户(文件属主)具有读、写、执行权限

        char *arg="Hello World";
        int wri=write(fd,arg,strlen(arg));
        printf("wirte succeed,wri=%d\n",wri);//输出写入的字节数

        close(fd);//关闭文件

        return 0;
}

输出结果:wirte succeed,wri=11

三、mkstemp——建立唯一的临时文件操作

1.原函数

表头文件
#include "stdlib.h"
定义函数
int mkstemp(char *template);

函数说明 ——mkstemp()用来建立唯一的临时文件,Mkstemp()会以可读写模式和0600权限来打开该文件,如果该文件不存在则会建立该文件
template——建立名为template内容的文件,字符串中最后六个字符必须是XXXXXX,template所指的字符串必须声明为数组
返回值——建立(打开)成功返回文件描述词。失败返回NULL,并把错误代码存在errno中

2.示例

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main()
{
        char mks[]="flie-XXXXXX";
        int fd=mkstemp(mks);//建立名为flie的文件,权限默认可读可写

        char *arg="Hello World";
        int wri=write(fd,arg,strlen(arg));
        printf("wirte succeed,wri=%d\n",wri);//输出写入的字节数

        close(fd);

        return 0;
}

运行结果
wirte succeed,wri=11

喜欢的请点赞加关注,谢谢您

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰~念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值