系统调用--因为用户空间不能直接访问内核空间,想完成功能又必须得到内核的支持.因此,内核层提供了系统调用,做用户空间进入内核空间的桥梁。系统调用是一系列的函数,包括各种系统的功能。我们系统编程接触的大多数都是系统调用
在linux中,几乎一切都是文件,目录,内存,各种硬件设备都可以看成文件
比如/dev/tty代表键盘和显示器
echo hello 默认输出到显示器
echo hello > a.txt 把输出改到a.txt中
echo hello > /dev/tty 把输出改到显示器中
cat /dev/tty 直接从键盘读取数据
vi ../ 查看上层目录的内容
标C用FILE*(文件指针)代表一个文件,UC用文件描述符代表一个打开的文件,文件描述符其实就是一个非负整数,文件描述符本身不存储任何文件信息,信息都存在文件表中,文件描述符对应文件表,对于linux来说,一个进程最多打开256个文件,描述符从0开始计算,0,1,2已经被系统占用,分别代表标准输入,标准输出,标准错误,程序员使用的文件描述符从3开始
文件读写函数
open() read() write() close() ioctl()
open() 打开一个文件,返回文件描述符
read()/write() 读写文件
close() 关闭文件
flags:标识,主要有以下宏定义
权限标识:O_RDONLY,O_WRONLY,O_RDWR(三者必选其一)
附加标识:O_APPEND,用追加的方式打开文件(从文件尾开始写,读文件不 需要使用)
创建标识:O_CREAT,存在就打开,不存在就创建
O_TRUNC,文件存在时清空所有数据(谨慎使用)
O_EXCL,不存在就新建,存在就不打开,返回-1
第三个参数:变长参数,代表有0-n个参数,只有在新建文件时使用,传递 关于新文件的权限
返回值:返回文件描述符,失败返回-1
多个选项之间用 位或 | 连接
系统权限屏蔽字,系统会屏蔽掉一些权限,屏蔽掉的权限在创建出的文件中不会有该权限(穿件文件时给的权限要去掉这些被屏蔽的权限)
我们可以使用umask来修改系统权限屏蔽字
umask(要屏蔽的权限)
buf是读/写的首地址,任意类型都可以
count1:是buf的大小(有可能读不满)
count2:真实想要写入的字节数
返回值:
正数:实际上读取/写入的字节数
0:读到文件尾/什么都没写
-1:出现错误
注意:read的返回值常用于作为循环读文件的退出条件
一.文件操作
非常常用的函数,包括读写函数和非读写函数在linux中,几乎一切都是文件,目录,内存,各种硬件设备都可以看成文件
比如/dev/tty代表键盘和显示器
echo hello 默认输出到显示器
echo hello > a.txt 把输出改到a.txt中
echo hello > /dev/tty 把输出改到显示器中
cat /dev/tty 直接从键盘读取数据
vi ../ 查看上层目录的内容
标C用FILE*(文件指针)代表一个文件,UC用文件描述符代表一个打开的文件,文件描述符其实就是一个非负整数,文件描述符本身不存储任何文件信息,信息都存在文件表中,文件描述符对应文件表,对于linux来说,一个进程最多打开256个文件,描述符从0开始计算,0,1,2已经被系统占用,分别代表标准输入,标准输出,标准错误,程序员使用的文件描述符从3开始
文件读写函数
open() read() write() close() ioctl()
open() 打开一个文件,返回文件描述符
read()/write() 读写文件
close() 关闭文件
int open(const char *pathname, int flags,...);
参数: pathname:要打开的文件的路径(包括文件名)flags:标识,主要有以下宏定义
权限标识:O_RDONLY,O_WRONLY,O_RDWR(三者必选其一)
附加标识:O_APPEND,用追加的方式打开文件(从文件尾开始写,读文件不 需要使用)
创建标识:O_CREAT,存在就打开,不存在就创建
O_TRUNC,文件存在时清空所有数据(谨慎使用)
O_EXCL,不存在就新建,存在就不打开,返回-1
第三个参数:变长参数,代表有0-n个参数,只有在新建文件时使用,传递 关于新文件的权限
返回值:返回文件描述符,失败返回-1
多个选项之间用 位或 | 连接
系统权限屏蔽字,系统会屏蔽掉一些权限,屏蔽掉的权限在创建出的文件中不会有该权限(穿件文件时给的权限要去掉这些被屏蔽的权限)
我们可以使用umask来修改系统权限屏蔽字
umask(要屏蔽的权限)
ssize_t read(int fd, void *buf, size_t count1);
ssize_t write(int fd, const void *buf, size_t count2);
参数: fd文件描述符,就是open的返回值buf是读/写的首地址,任意类型都可以
count1:是buf的大小(有可能读不满)
count2:真实想要写入的字节数
返回值:
正数:实际上读取/写入的字节数
0:读到文件尾/什么都没写
-1:出现错误
注意:read的返回值常用于作为循环读文件的退出条件