目录
标准io:
标准io;
stdio.h
1,标准io的概念 1975 Dennis r IO库,C语言的标准,ANSI c
IO input output
I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input
O: 显示器是标准输出设备 ==》默认输出就是指显示器
Linux操作系统当中IO都是对文件的操作
C一部分,任何支持标准C的系统都可使用标准IO实现文件存储
标准IO在UNIX上是对文件IO的封装
讨论标准io指的是以计算机为中心,将信息进计算机的过程称为输入input,将出计算机的过程叫output。
注意:
文件是特别重要的,在linux之中一切皆文件:文件可以用来存储数据和指令。
头文件:
带<>
的是系统自带的头文件;
stdio.h是标准的输入输出头文件,
其中其默认路径在:/user/inlcude/stdio.h
而“”是系统自编的头文件,默认是当前文件所在的路径。
man手册:
man指的是manual。其中分为9个章节
1.shell commands 命令章节
2.system call 系统调用
3.Library calls 库调用,一般可以跨平台。
4.特殊文件(/dev等设备对应文件)
5.File formats and conventions 配置文件
6.games 简单游戏
7.Miscellaneous 杂项文件
8.system administration commands (root文件,给予管理员使用的)
9.kernel routines (非标准,列举软件更新信息)
man的使用:
作用:
man可以用来查电脑库中带有的函数介绍。
使用方法:
man + 手册章节数 (可省略)+ 要查的函数名。
一般所调用函数存在可选项的话,可选项的取值在下方的description会有介绍
而它的返回值可以看return模块的内容。
文件操作:
文件操作流程:
1.打开文件:FILE
2.IO操作
3.关闭文件
打开文件函数:
FILE *fopen(const char *patehname,char *mode)
char *pathname 指的是以打开文件所在的路径和文件名的字符串
char *mode指的是所要采用的模式的字符串
mode可分为4个:
r:打开文件时权限为只读
r+“打开文件权限为可写可读(不清空文件内容)
以上两个模式要求文件必须存在
w:把文件清空或者是创建文件,文件以只写打开。
w+:可读可写文件,但是前提每次都会将文件清空
a:文件不存在时创建,文件存在时则追加只写打开
a+:文件不存在时创建,文件存在时则追加读写打开,定位到最后的那个内容
返回值:
打开成功时返回建立文件对应的流指针
失败时则返回空指针NULL。
IO读写操作:
fgetc函数:
int fgetc(FILE *stream);
FILE *stream 指的是打开文件的流指针,从指针所对应文件里面一个一个读字符。
返回值:
成功时:其返回值是所读字符的ascii码
失败时:要么是读取失败,要么是数据已经被读完了,此时返回EOF(即-1).
fputs函数
int fputs(int c,FILE *stream)
int c指的是所要写到文件里的字符的ascii码
FILE *stream指的是所要写内容的文件。
返回值:
成功时返回的是所打印出的字符的ascii码
失败时:返回的是EOF
注意:以上两个函数都是一个一个的读文件中的数据,然后一个一个的将数据写进文件。
fgets函数
用于读取文件中字符串的操作,一次读取一行,遇到换行符\n
或者结束标志位\0
就结束,不管有没有全部读取满
char *fgets(char *s,int size,FILE *stream);
char *s指用于存放读取出来的字符串的地址。
因此在读取时需要准备一个字符数组来存放读取出来的字符串
如:
char buf[1024] ={0};//一般中括号中数组大小取1k~4k
int size 指的是要读多少个字符,//在读取多少个字符时要算上结束标志位。比如当设置为7时,指的是读取6个字符加1个标志位
FILE *stream指的时所要读取的文件
返回值:
成功时:返回的是存放字符串的地址。
失败时,返回的是NULL指针
fputs函数
用于写字符串,遇到结束标志位就结束写入
int fputs(const char *s,FILE *stream);
const char *s 指的是所要写入的字符串
FILE *stream指的是要写入的目标文件。
返回值:
成功时,返回的是一个非负数
失败时,返回的是一个EOF
==注意:==以上两个字符串的读取以及输出函数,其由于遇到结束标志位和换行符就会结束,所以不适合用于二进制文件的复制。
fwrite函数
用于自定义大小二进制数复制
size_t fwirte(const void *ptr,size _t size,size_t nmember ,FILE*stream)
const void *ptr 指的是所要读取数据的地址
size_t size:指的是所要读取数据数据类型的字节数
size_t nmember 指的是要读取这样的类型数据的次数
FILE *stream指的是所要读取文件的流指针。
返回值:
成功时:其返回值就是size_t nmember中的大小
失败时,其值是一个小于size_t nmember的数,或者零。
fread函数:
size_t fread(const void* ptr,size_t size,size_t nmember,FIlE *stream)
const void*ptr 指的是所要读取数据的地址,
size_t size指的是所要读取数据类型的字节数
size_t nmember 指的是要将这个数据读几份(一般当读的数据类型是数组时才考虑)
FIlE *stream指的是所要读的文件。
散知识点:
cp复制的原理:
从硬盘中取数据,然后将数据进入内存中处理,然后再将数据写进硬盘中。
vimdiff小工具:
可以比较两个文件不一样的地方,其不一样的地方会通过高亮标记出来。
使用方法:
vimdiff 加文件名
找文件路径的方法:
再ui中找到文件,然后再ui界面点击右键,打开终端界面。输入pwd就可以显示文件所在路径
state命令:
可以用来查看文件的详细信息。
使用方法:
state 加文件名
其可以显示文件详细的大小,时间,等等信息
流文件的分类:
二进制流:
以二进制一个一个字节的显示文件内部数据。\
od -t x1 文件路径|less
od指的是查看文件字节命令
-t指的是以二进制数查看
x后面数字指的是以一个一个字符打印
文本流:
将文本中的数据转换成字符查看
od -c x1 文件路径|less
——c指的是以文本的形式查看
局部变量初始化:
在定义局部变量之后如果不进行初始化,其内部空间的数据是混乱且随机的。
我们有三种方法处理:
1.初始化:
buf[1024] ={0};
2.memset函数
将空间按预定值填充
memset(void *p,int c,size_t size);
其中
void*p指的是所要清空空间的地址
int c指的是填充清空空间的目标数
size_t 指的是要清空多少个空间
3.bzero(void* P,size_t size).
用零填充空间,以二进制形式清零
文件权限:
1、d 2、rwx 3、r-x 4、r-x 5、2 6、linux 7、linux 8、 4096 9、10月 12 2021 10、Videos/
通过`ll`命令可以查看文件权限:
其中分为以下参数:
1.文件类型
d 目录文件
c 设备文件
b 块文件
l 软连接,符号链接
p 管道文件 系统虚拟出的文件
s 套接字文件
2.指的是作者权限(用户权限)
r 可读
w 可写
x 可执行
可以将其转换为8进制数,当是横线的时候代表零,当对应位置上有字母时,则该位置上是1,其三位加起来,就可以当成是3为2进制数,可以通过数字来修改权限
3.指的是组成员权限。
4.其他成员权限
5.硬链接
多个文件关联一个内容太,现在没用了
6.用户名
7.组员名
8.文件大小
9.文件编辑时间
10.文件名