linux 文件操作


 总结linux 下的常用文件操作

打开文件 open

#include
#include
#include

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

pathname:文件名

flags:文件操作位

  O_RDONLY=只读

  O_WRONLY=只写

  O_RDWR=可读可写

返回值fd:-1=打开错误

        其他=指向这个文件的文件描述符

从文件中读数据,把数据读取到缓冲区:read

#include

ssize_t numread=read(int fd, void *buf, size_t count);

fd=文件描述符

buf=存放数据的目的缓冲区

count=读取数据的字节个数。

返回值numread:-1=读取错误

    正整数=成功读取的字节数目

关闭文件 close

#include

int result=clsoe(int fd)

fd=文件描述符

result:-1=关闭错误,0=关闭成功

创建/重写文件 creat

#include

int fd=creat(const char *pathname, mode_t mode);

pathname=文件名

mode=访问模式

  O_APPEND

  O_ASYNC

  O_CLOEXEC

  O_CREAT

  ...

返回值: -1=错误,fd=文件描述符

如果 pathname 存在,那么就打开这个文件

如果 pathname 不存在,就创建这个文件

向文件写入数据 write

#include

ssize_t result=write(int fd, const void *buf, size_t count);

fd文件描述符

buf= 待写入数据

count= 写入数据个数

result:-1=写错误,正整数=成功写入个数

每次系统打开一个文件都会保存一个指针记录文件的当前记录。

这个指针是与文件描述符关联的,有几个文件描述符既有几个指针。

lseek 可以改变文件描述符所关联的指针的位置

重定位文件读写位置 lseek

#include
#include

off_t dolpos=lseek(int fd, off_t offset, int whence);

fd=文件描述符

offset=文件的移动距离,可以为负数

whence=移动起始位置

  SEEK_SET=文件起始位置

  SEEK_CUR=文件当前位置

  SEEK_END=文件结束位置。

dolpos:-1=错误 正整数=指针变化前的位置

例:lseek(fd, 0, SEEK_CUR返回文件指针指向的当前位置

打开一个文件,获取指向这个文件的数据流 fopen

#include

FILE *stream=fopen(const char *path, const char *mode);

FILE *stream=fdopen(int fd, const char *mode);

FILE *stream=freopen(const char *path, const char *mode, FILE *stream);

path=文件名

mode=打开模式 r,r+,w,w+,a,a+

fd=文件描述符

stream=指向这个文件的信号输出输入流

从指定文件流中读取 指定长度数据 fgets

#include

char *pc=fgets(char *s, int size, FILE *stream);

s= 存储读出的数据

size=读取的数据长度

stream=文件流

pc:返回值 NULL=读取错误,非NULL=成功

int fgetc(FILE *stream);  

  从文件流 stream 中读取一个字符

char *fgets(char *s, int size, FILE *stream);

  从文件流 stream中读取给定长度字符

int getc(FILE *stream);

  从文件流 stream 中读取下一个字符,默认会读取多个字符。

int getchar(void);

  从stdin()中标准输入设备读取下一个字符

char *gets(char *s);

  从stdin()中标准输入设备读取一串 ‘\n’或‘\0’ 结尾的字符串

int ungetc(int c, FILE *stream);

  将字符c输出到 文件流中,返回c成功, EOF失败

输出到文件流中

#include

int fputc(int c, FILE *stream);

  将字符c输出到 文件流中,返回c成功, EOF失败

int fputs(const char *s, FILE *stream);

  将字符串s输出到 文件流中,没有文件结尾符'\0', EOF失败,非0成功

int putc(int c, FILE *stream);

  将字符c输出到 文件流中,返回c成功, EOF失败,默认会多次输出,调用 fputc

int putchar(int c);

  将字符c输出到 标准输出流 stdout 中,返回c成功, EOF失败,默认会多次输出 调用 putc

int puts(const char *s);

  将字符c输出到 标准输出流 stdout 中,并输出"\n",EOF失败,非0成功

关闭文件流指针 fclose

#include

int fclose(FILE *fp);

  fp=文件流指针

  返回值:0=成功,其余=失败

修改文件流指针位置 fseek

#include

int fseek(FILE *stream, long offset, int whence);

stream=文件流指针

offset=移动距离

whence=移动起始点

  SEEK_SET=文件起始位置

  SEEK_CUR=文件当前位置

  SEEK_END=文件结束位置

基于文件流的读写 fread/fwrite

#include

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

ptr= 数据缓存地址

size= 元素长度

nmemb=  元素个数

返回值 : 负数=失败,正整数=成功读写元素个数  ps:元素可以是一个结构体

查看文件的属性: stat

#include
#include
#include

int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);

  path=文件名

  fd=文件描述符

  buf=存放文件属性的结构指针

  返回值:0=成功,-1=失败

修改文件属性 chmod

#include

int chmod(const char *path, mode_t mode);

  path=文件名

  mode=新的文件权限和属性类型 如 0744

  返回值:-1=失败,0=成功

修改文件所有者 chown

#include

int chown(const char *path, uid_t owner, gid_t group);

  path=文件名

  owner=新的文件所有者ID

  group=新的组ID

  返回值:-1=失败,0=成功

修改文件最后修改和访问时间 utime

#include
#include

int utime(const char *filename, const struct utimbuf *times);

  filename=文件名

  times=结构 utimbuf 的指针,

  返回值:-1=失败,0=成功

修改文件名 rename

#include

int rename(const char *oldpath, const char *newpath);  

  oldpath=旧的文件/目录名

  newpath=新的文件/目录

  返回值:-1=失败,0=成功

控制文件描述符 fcntl

#include
#include

int ret=fcntl(int fd, int cmd, ... /* arg */ )

  fd=文件描述符

  cmd=需要进行的操作

   /* arg */ =操作的参数

  ret:-1=失败,其余,按操作而定。

fcntl 在fd指定的文件上执行操作cmd。arg是cmd 的参数/。

读取tty(终端)驱动程序的属性 tcgetattr

#include
#include

int ret=tcgetattr(int fd, struct termios *termios_p);

  fd=文件描述符

  termios_p=指向终端结构的指针

  ret:-1=失败,成功。

设置tty驱动程序的属性 tcsetattr

#include
#include

int tcsetattr(int fd, int optional_actions,const struct termios *termios_p);

  fd=文件描述符

  optional_actions=改变设置的时间

    TCSANOW=立即

    TCSADRAIN=等待驱动程序队列中的所有输出都被传送到终端

    TCSFLUSH=等待指到驱动程序队列中的所有输出都被传送出去,释放队列中的所有输入数据。

  termios_p=指向终端程序的指针

  ret:-1=失败 0=成功

相关