linux C 常用io函数说明

int open(constchar*pathname,intflags,mode_tmode);
返回值:成功则返回文件描述符,否则返回-1

O_RDONLY只读模式
O_WRONLY只写模式
O_RDWR读写模式

O_APPEND每次写操作都写入文件的末尾
O_CREAT如果指定文件不存在,则创建这个文件
O_EXCL如果要创建的文件已存在,则返回-1,并且修改errno的值
O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0)
O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端。
O_NONBLOCK如果路径名指向FIFO/块文件/字符文件,则把文件的打开和后继I/O

int close(int fd);
close 返回 0 表示 成功 , 或者 -1 表示 有 错误 发生 .

ssize_t read(int fd, void *buf, size_t count);
成功时返回读取到的字节数
从文件描述符 fd 中读取 count 字节的数据并放入从 buf
开始的缓冲区中.

ssize_t write(int fd, const void *buf, size_t count);
向文件描述符 fd 所引用的文件中写入 从 buf 开始的缓冲区中 count
字节的数据.
成功时返回所写入的字节数

off_t lseek(int fd, off_t offset, int whence);
每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read()或write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。

SEEK_SET 将读写位置指向文件头后再增加offset个位移量。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量。

FILE *fopen(const char *path, const char *mode);
函数 fopen 打开文件名为 path 指向的字符串的文件,将一个流与它关联。
r 打开文本文件,用于读。流被定位于文件的开始。
r+ 打开文本文件,用于读写。流被定位于文件的开始。
w 将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始
w+ 打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。
a 打开文件,用于追加
(在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。
a+ 打开文件,用于追加
(在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。

int fclose(FILE *stream);
函数fclose将名为stream的流与它底层关联的文件或功能集合断开。如果流曾用作输出,任何缓冲的数据都
将首先被写入,使用fflush(3) 。
成功执行返回 0,否则返回 EOF 并设置全局变量 errno
来指示错误发生。

int fputs(const char *s, FILE *stream);
向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。

char *fgets(char *s, int size, FILE *stream);
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋’\0’),
如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,
但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,
应该借助feof函数或者ferror函数来判断。

int fflush(FILE *stream);
函数fflush强制在所给的输出流或更新流stream
上,写入在用户空间缓冲的所有数据,使用流的底层写功能函数。流的打开状态不
受影响。
成功执行返回 0,否则返回 EOF 并设置全局变量 errno 来指示错误发生。

int fseek(FILE stream, long offset, int whence);
如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2
102410241024,即long的正数范围2G),
则不改变stream指向的位置,函数返回一个非0值。
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾

void rewind(FILE *stream);
C 程序中的库函数,功能是将文件内部的指针重新指向一个流的开头

char *gets(char *s);
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,
所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

int puts(const char *s);
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s);
puts(s) 等效于printf("%s\n",s),前提 :s是C风格字符串,最后以’\0’结尾。

int fprintf(FILE *stream, const char *format, …);
fprintf( )会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束(’\0’)为止。

int sprintf(char *str, const char *format, …);
sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。
使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,
可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。

int fgetc(FILE *stream);
从流中读取字符。
这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。

int fputc(int c, FILE *stream);
fp为文件指针,它的值是执行fopen()打开文件时获得的。
c为输出的字符量。虽然函数被定义为整形数,但仅用其低八位。
返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。

int feof(FILE *stream);
feof是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值),文件结束符只能被clearerr()清除。

int ferror(FILE *stream);
在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。
如果返回一个非零值,表示出错。

void clearerr(FILE *stream);
clearerr的作用是使文件错误标志和文件结束标志置为0.假设在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。
只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何一个输入输出函数。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);
fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。

DIR *opendir(const char *name);
opendir()函数的作用是:打开目录句柄。
如果该函数成功运行,将返回一组目录流(一组目录字符串),如果失败将返回错误[error]。你可以在函数的最前面加上“@”来隐藏错误。

int mkdir(const char *pathname, mode_t mode);
创建一个目录,若成功则返回0,否则返回-1

int readdir(unsigned int fd, struct old_linux_dirent *dirp,
unsigned int count);
读一个目录

void rewinddir(DIR *dirp);
rewinddir用来设置参数dir目录流目前的读取位置为原来开头的读取位置,没有返回值的函数。

long telldir(DIR *dirp);
telldir()函数的返回值记录着一个目录流的当前位置。此返回值代表距离目录文件开头的偏移量返回值返回下个读取位置,有错误发生时返回-1。
你可以在随后的seekdir函数调用中利用这个值来重置目录扫描到当前位置。错误代码 EBADF参数dir为无效的目录流。

void seekdir(DIR *dirp, long loc);
seekdir()用来设置参数dir目录流当前的读取位置,在调用readdir()时便从此新位置开始读取。参数offset 代表距离目录文件开头的偏移量。

int closedir(DIR *dirp);
closedir()关闭参数dir所指的目录流。关闭成功则返回0,失败返回-1,错误原因存于errno 中。EBADF 参数dir为无效的目录流。
注意:目录文件作为一种文件,再打开必须关闭,否则会由于文件的进程打开文件过多而不能打开新的文件。因此opendir函数和closedir函数同样是配对出现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值