最新消息:

Linux下不带缓冲的I/O操作函数1

C/C++ admin 3449浏览 0评论

首先了解“文件描述符”:对于内核而言,所有打开的文件都是通过文件描述符引用。它是一个非负整数,它的范围是0~OPEN_MAX。

Linux系统下大多数文件I/O操作只要5个函数就可以:

  1. open
  2. read
  3. write
  4. lseek
  5. close
  • 调用函数open可以打开或创建一个文件。

#include<fcntl.h>

int open(const char *filename,int flag,/*mode_t mode*/);

这里的第三个参数只在创建文件时才有。关于flag的取值,可以man一下。

如果成功返回文件描述符,否则返回-1。

  • 调用creat可以创建一个新文件。

#include<fcntl.h>

int creat(const char *filename,int flag,mode_t mode);

其实它就等效于open(filename,O_WRONLY | O_CREAT | O_TRUNC,mode);

如果成功返回为文件只写打开的文件描述符,否则返回-1。

  • 调用close函数关闭一个打开的文件。

#include<unistd.h>

int close(int file);

如果成功返回0,否则返回-1。

  • 关于函数lseek

每打开一个文件都有一个于之对应的“当前文件偏移量”,系统默认打开一个文件的偏移量为0。函数lseek可以设置这个偏移量。

#include<unistd.h>

off_t lseek(int file,off_t offset,int whence);

参数offseet的解释与whence有关:

若whence是SEEK_SET,则将文件的偏移量设置为据文件开始处offset个字节处。

若whence是SEEK_CUR,则将文件的偏移量设置为当前值加offset。

若whence是SEEK_END,则将文件的偏移量设置为文件长度加offset。

如果函数成功执行,返回新的偏移量,否则返回-1,错误信息可以查看errno。

  • 调用read函数从打开的文件中读取数据。

#include<unistd.h>

ssize_t read(int file,void *buf,size_t nbytes);

如果调用成功,返回读到的字节数,如已读到文件尾则返回0,出错就返回-1。

  • 调用write函数向打开的文件写数据。

#include<unistd.h>

ssize_t write(int file,const char *buf,size_t nbytes);

若调用成功返回已写字节数,失败返回-1,通常返回值如果与nbytes相同,则表示出错。

转载请注明:爱开源 » Linux下不带缓冲的I/O操作函数1

您必须 登录 才能发表评论!