1.系统调用、库函数
1.1 系统调用
系统调用实际上就是指最底层的一个调用,在linux程序设计里就是底层调用的意思。面向的是硬件。
系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件
1.2 库函数
库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因。
第一:双缓冲技术的实现。
第二,可移植性。
第三,底层调用本身的一些性能方面的缺陷。
第四:让api也可以有了级别和专门的工作面向。
库函数对文件的操作实际上是通过系统调用来实现的。例如C库函数fwrite()就是通过write()系统调用来实现的。
库函数调用是系统无关的,因此可移植性好。
2.标准IO
2.1 文件指针FILE*
可用于定义文件指针FILE *fp;
2.2 文件打开
打开一个文件,使用fopen()函数
fp = fopen(filename,mod);
第一个参数为文件名或者路径
第二个参数为打开的方式
打开成功返回文件指针,失败返回NULL。
常用的打开方式有:
“r”:只读
“w”:只写
“a“:在行末追加数据
”rb":以二进制的方式只读
“wb”:以二进制的方式只写
3.文件IO
3.1 文件描述符int fd
可用于表示一个文件描述符,int类型
3.2 文件打开
使用open()的系统调用,无缓冲空间,速度慢,但是存储及时
fd = open(filename,mod);
第一个参数为文件名
第二个参数为打开方式
打开失败返回-1
常用的打开方式有:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_APPEND:追加
O_CREAT:不存在就创建
不同的方式之间用|连接
特殊的文件描述符:标准输入输出:STDIN_FILENO,STDOUT_FILENO,值分别是0,1
3.3 文件读写
write(fd,buff,sizeof(buff));
参数分别为,文件描述符,字符串,要写入数据的字节数
read(fd,buff,sizeof(buff));
参数相同,不过将写变为读,返回值为读到的字符个数
4.目录操作
4.1 常用的linux命令用于操作目录
mkdir:创建目录 如:mkdir aaa/
pwd:显示当前工作目录
ls:显示当前目录下的文件和文件夹 -a显示所有文件 -l显示详细信息 会显示文件属性
cd:进入目录
tree:显示文件目录树 -L:显示访问级别 如-L1只显示一级目录
mv:移动文件,文件夹或者改变名字
cp:拷贝文件或者文件夹到某个目录
5.文件属性
5.1 使用ls -l查看会显示每个文件或者文件夹的属性
如某文件显示属性为:
d 文件类型 rwx 拥有者权限 r-x 拥有组权限 r-x 其他人权限 2 pi 拥有者 pi 拥有组
文件类型共有三种:-:普通文件 d:目录文件 p:设备文件
权限分别代表:r:读 w:写 x:操作 实际是用三位二进制来表示,权值分别为421,总大小为7
5.2 chmod这个命令,可以用于改变文件的权限
如:chmod -w x:可以取消对x目录的写的权限(默认对于当前用户来说)
或者:chmod 777 x:赋予所有用户对x文件的所有权限
5.3 掩码umask
可以用于决定在创建文件时的初始权限默认为0022 。
八进制,后三位就是文件的权限了 0022 为0000 0000 0010 0010 1代表没有权限。
所以对于默认创建的文件来说,用户组和其他用户没有写的权限。
可用umask 命令来改变掩码的值。