系统相关
首页 > 系统相关> > linux文件IO

linux文件IO

作者:互联网

1.open/close

函数原型:

  int open(const char *pathname,int flags);

  int open(const char *pathname,int flags,mode_t mode);

参数:

  pathname:文件名

  flags:

    必选项:O_RDONLY,O_WRONLY,O_RDWR

    可选性:

      创建文件:O_CREAT

        创建文件时检测文件是否存在:O_EXCL,文件存在则返回-1,需与O_CREAT一起使用

      追加内容:O_APPEND

      文件截断:O_TRUNC

      设置非阻塞:O_NONBLOCK

  mode:创建的文件的权限

    文件实际得到的权限为mode&~umask,umask为系统的掩码(可通过umask命令查看),设置权限时需注意。

 

2.read

函数原型:ssize_t read(int fd,const void *buf,size_t count)

参数:

  fd:文件描述符

  buf:缓冲区,存储读取到的数据

  count:缓冲区能存储的最大字节数sizeof(buf)

返回值:

  -1:读取失败

  >0:读取到的字节数

  =0:读取完毕

 

3.write

函数原型:ssize_t write(int fd,const void *buf,size_t count)

参数:

  fd:文件描述符

  buf:写到文件的数据

  count:strlen(buf)

返回值:

  -1:写入失败

  >0:写入的字节数

  =0:写入完毕

 

4.lseek

函数原型:off_t lseek(int fd, off_t offset, int whence);

参数:

  fd:文件描述符

  offset:偏移量,int型,正数为向后偏移,负数为向前偏移

  whence:SEEK_SET:将文件指针偏移到传入字节数处

      SEEK_CUR:将文件指针偏移到当前位置加上传入字节数处

      SEEK_END:将文件指针偏移到文件末尾加上传入字节数处

返回值:当lseek执行成功时,它会返回最终以文件起始位置为起点的偏移位置。如果出错,则返回-1,同时errno被设置为对应的错误值。

使用:

  文件指针移动到头部:lseek(fd,0,SEEK_SET);

  获取文件指针当前的位置:lseek(fd,0,SEEK_CUR);

  获取文件长度:lseek(fd,0,SEEK_END);

  文件拓展:

    例:文件原来大小为100k,拓展为1100k

    lseek(fd,1000,SEEK_END);

    最后执行一次写操作,不然拓展失败

    write(fd,“a”,1);

 

5.阻塞和非阻塞

阻塞是文件的属性,打开文件时设置文件的读写操作为阻塞,则在读取不到文件内容时,程序不会继续往下执行。

文件的属性:

  普通文件:例:hello.c

    默认为不阻塞,read读取内容,无论有无读取到,程序都往下执行

  终端设备:例:/dev/tty、管道、套接字等

    默认阻塞,read读取不到内容时,程序不会继续执行

 

标签:文件,读取,lseek,int,fd,IO,linux,SEEK
来源: https://www.cnblogs.com/czhdbk/p/14398141.html