一.系统调用
什么是系统调用?
只有系统调用(系统函数)才能进入内核空间,库函数也是调用系统函数,才得以访问底层。
系统调用由操作系统实现并提供给外部应用程序的编程接口。是应用程序同系统之间数据交互的桥梁。
换句话说,系统调用就是操作系统封装好的函数接口,使得用户能够利用它调用底层驱动,从而控制硬件。
二.open函数,read函数,write函数
1.open
所需头文件:
#include<fcntl.h>
#include<unistd.h>
open函数用来打开文件,具体有以下两种重载类型。
正常打开返回一个int整数(文件描述符),打开出错返回-1
path : 路径名 flags: 打开方式 mode:生成文件时的权限(4位8进制数)
第一种是文件存在时,指定打开方式
第二种是文件不存在,且要求创建文件时,按mode指定权限
flags分为以下几种:
O_RDONLY :只读
O_WRONLY:只写
O_RDWR:读写
O _APPEND:追加写
O_CREAT:无文件时创建
O_EXCL:是否存在
O_TRUNC:文件清空再打开
#include<fcntl.h> 这些包含在头文件<fcntl.h>中,所以需要引入#include<fcntl.h>
使用close(文件描述符) ----------关闭流
2.read
read函数返回读入的字节数,读出错误返回-1
read(文件描述符,字符串缓冲区,读出字节数)
3.write
write函数将缓冲区内容读入文件,返回写入的字节数,写入失败返回-1
write(文件描述符,字符串缓冲区,写入字节数)
4.案例:使用read write实现cp操作
cp 文件1 文件2
对main函数传递两个参数,代表文件名
文件一,使用只读打开方式
文件二,无文件时创建文件。
使用buffer缓冲区(1024字节),循环输入文件,当read函数读入字符数为空时,read函数返回0,此时退出循环。