I/O编程

本文介绍了C语言中标准IO函数,如fopen、fclose、fread、fwrite等用于文件操作的函数,以及底层的系统调用,如open、close、read、write和lseek。同时,还涵盖了目录操作的opendir和readdir函数,以及静态库和动态库的链接方法。
摘要由CSDN通过智能技术生成

DAY2

常见的标准IO函数

FIFE *fopen(const char *path, const char *mode);

/*

path: 打开文件路径

mode: 打开文件模式

*/

int fclose(FIFE *stream)

// 关闭当前文件流

int fgetc(FIFE *stream)

// 读取一个字符,返回该字符转换为int类型的值

int fputc(int c, FIFE *stream);

// 把c转换为对应的字符,写到stream里

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

// 读到换行符或者EOF截止,结果保存到s中,会多保存一个'\0'

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

// 把s除去'\0'之外的字符写到stream里

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

// 读nmemb个元素,每个大小size字节,保存到ptr里

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

// 写nmemb个元素,每个大小size字节,写到stream里

// 文件位置指针相关:

int fseek(FIFE *stream, long offset, int whence)

long ftell(FIFE *stream)

void rewind(FIFE *stream)

int fflush(FIFE *stream)

// printf/scanf一族

int printf(const char *format);

int fprintf(FIFE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...); //可以看成是atoi的反向函数

//sprintf()可能会造成缓冲区溢出

int snprintf(char *str, size_t size, const char *format, ...);

int scanf(const char *format, ...);\

int fscanf(FILE *stream, const char *format, ...);

int sscanf(const char *str, const char* format, ...);

1.1 按对象读取

读:

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

// 读nmemb个元素,每个大小size字节,保存到ptr里

ptr内存空间 缓冲区地址

返回值:成功返回读的对象个数,失败,非正数

size:字节

nmemb:对象个数

stream:流

写:

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

// 写nmemb个元素,每个大小size字节,写到stream里

1.2 报告文件位置

long ftell(FILE*stream)

功能:查询“光标”位置

返回值:光标位置;

stream:流

1.3 文件偏移

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

功能:光标移动

offset:偏移量

whence:基础位置

seek_set 头位置

seek_cut 当前位置

seek_end 末尾位置

文件IO

  1. 直接的系统调用

open/close/read/write/lseek

2.1 open

int open(char *pathname,int flags)

功能:打开文件,产生文件描述符

描述符:标记打开文件的数字

0---标准输入 1 -----输出 2-----出错

返回值:成功返回描述符,失败返回-1

pathname:文件名路径

flags:打开文件的权限或方式

包含其中一个:

0_RDONLY:只读

O_WRONLY:写

O_RDWR:读写

O_CREAT:文件不存在则创建

mode:主要O_CREAT出现才用

表示创建文件的权限0777

2.2 read

ssize_t read(int fd,viod *buf,size_t count)

功能:从打开的文件描述符读取文件内容

返回值:成功返回读到的字节数,失败返回-1

fd:已经打开的文件描述符

buf:存放的内容的缓冲区

count:预计读的字节数

count不能超过buf的字节大小

2.2 write

ssize_t write(int fd,const viod *buf,size_t count)

功能:从打开的文件描述符写文件内容

返回值:成功返回读到的字节数,失败返回-1

fd:已经打开的文件描述符

buf:存放的内容的缓冲区

count:预计读的字节数

count不能超过buf的字节大小

2.4 close

int close(int fd);

功能:关闭打开文件的标识符

返回值:0/1

fd:已经打开的文件描述符

2.5 lseek

off_t lseek(int fd,long offset,int whence)

功能:文件内部光标 偏移

返回值:非负数/-1

fd:偏移的文件的文件描述符

offset:偏移量

whence:基础位置

SEEK_SET

SEEK_CUR

SEEK_END

3目录操作

3.1 opendir

DIR * opendir(const char *pathname);

功能:打开目录文件,产生目录的流

返回值:成功返回流指针,失败返回NULL

patnname:指定目录的路径

3.2 readdir

struct dirent *readdir(DIR *dirp);

功能:读一次目录流,得到文件信息

返回值:成功返回文件结构体信息,失败NULL

dirp:打开的目录流

4 库文件

4.1 静态库

gcc -c hello main.c -o hello.o

-I: 指定头文件的路径

-L:指定库文件的路径

-l:链接某个具体的库

4.2动态库

ggc -fpic -wall -c hello.c

gcc - share -o libmyhello.so hello.o

gcc main.c -l,-lmyhello

可以把动态库文件放在

静态库和动态库重名时,默认链接动态库,需要链接静态库,在编译链接加上static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值