文件IO和标准IO的区别


缓冲区:
1.行缓冲
默认大小1024字节(1K),主要使用在人机交互终端上。
off_t lseek(int fd, off_t offset, int whence);
功能:重新定位文件的读写位置
参数:
fd:文件描述符
offset:偏移量
whence:要偏移的起始位置
SEEK_SET :从文件开头偏移
SEEK_CUR: 从当前读写位置偏移
SEEK_END :从文件末尾偏移
返回值:
成功:返回当前读写位置到文件开头的偏移量
失败:-1
刷新条件:
遇到'\n'刷新
程序结束刷新
使用fflush()强制刷新
缓冲区满时自动刷新
2.全缓冲
默认大小4096字节(4K),文件交互
刷新条件:
程序结束刷新
文件关闭自动刷新
全缓冲区满时自动刷新
使用fflush()强制刷新
3.无缓冲
0k,出错信息输出,标准出错设备
stderr
目录文件
- 打开目录文件:opendir()
- 读目录文件 :readdir()
- 关闭目录文件 : closedir()
opendir
DIR *opendir(const char *name);
**功能:**打开目录文件并获得目录流指针
参数:
name:目录名
返回值:
成功:目录流指针
失败:NULL
closedir
int closedir(DIR *dirp);
int closedir(DIR *dirp);
功能 :关闭目录文件
参数:
dirp:目录流指针
返回值 :
成功: 0
失败:-1
readdir
struct dirent *readdir(DIR *dirp);
功能:从目录流中读取数据
参数 :
dirp:目录流指针
返回值:
成功:struct dirent 指针,代表读到的文件信息
失败:NULL
文件末尾:NULL
命令:
mkdir:创建文件夹
touch:创建普通文件
目录遍历:
int main(void)
{
DIR *pdir = opendir("/dev");
if (NULL == pdir)
{
printf("opendir error\n");
return -1;
}
while (1)
{
struct dirent *pinfo = readdir(pdir);
if (NULL == pinfo)
{
break;
}
if ('.' == pinfo->d_name[0])
perror
{
continue;
}
printf(" %s : %ld\n", pinfo->d_name, pinfo->d_ino);
}
closedir(pdir);
return 0;
}
其他
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
功能:将格式化后的字符串写入到stream文件流代表的文件中。
int dprintf(int fd, const char *format, ...);
功能:将格式化后的字符串写入到fd所代表的文件中。
*int sprintf(char *str, const char *format, ...);
功能 :将格式化后的字符串写入到字符型数组中
字符串的拼接,格式化
可以将整形数据、浮点型数据等转换成字符串
char *strtok(char *str, const char *delim);
功能 :字符串截取函数
参数 :
str:要截取的原始字符串
delim:要截断的分隔符
返回值 :
成功:截取到的子字符串的首地址
失败:NULL(已经到字符串末尾)
出错处理函数:
strerro
char *strerror(int errnum);
功能 :将错误码转换成对应的错误信息字符串
参数 :
errnum:错误码:errno
返回值:
成功:返回错误码对应的字符串首地址
失败:NULL
perror
void perror(const char *s);
功能:打印自己的出错处理信息和系统系统给出的出错