一、操作系统的五大功能:
{
1.进程管理
2.内存管理
3.文件系统管理
4.设备控制
5.网络管理
}
二、什么是系统调用
{
1.系统调用就是内核提供的接口函数
2.遵循POSIX标准,可移植性强
}
三、系统调用 I/O 函数
{
头文件
{
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
}
系统默认打开的三个文件:
{
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
}
open()函数
{
当文件存在时使用:
int open(const char *path, int flags)
当文件不存在时使用:
int open(const char *path, int flags, mode_t mode)
返回值:
成功:返回文件描述符
失败:返回-1,可以利用perror去查看失败原因
flags 的取值含义:
{
O_RDONLY
O_WRONLY
O_RDWR
flags除了取上述值以外,还可以与下述值位或
O_CREAT :文件不存在则创建文件,使用此选项时,需使用mode参数说明文件的权限
O_EXCL : 如果同时指定了O_CREAT,且文件已经存在,则出错
O_TRUNC : 如果文件存在,则清空文件内容
O_APPEND : 写文件时,数据添加到文件末尾
O_NONBLOCK : 当打开的文件是FIFO,字符文件,块文件时,此选项为非阻塞标志位
}
mode 的取值含义:
{
S_IRWXU 00700 文件所有者的读、写、可执行权限
S_IRUSR 00400 文件所有者的读权限
S_IWUSR 00200 文件所有者的写权限
S_IXUSR 00100 文件所有者的可执行权限
S_IRWXG 00070 文件所有者同组用户的读、写、可执行权限
S_IRGRP 00040 文件所有者同组用户的读权限
S_IWGRP 00020 文件所有者同组用户的写权限
S_IXGRP 00010 文件所有者同组用户的可执行权限
S_IRWXO 00007 其他组用户的读、写、可执行权限
S_IROTH 00004 其他组用户的读权限
S_IWOTH 00002 其他组用户的写权限
S_IXOTH 00001 其他组用户的可执行权限
}
}
close()函数
{
int close(int fd)
参数:
fd: 文件描述符
返回值:
成功:返回0
失败:返回-1,可以利用perror去查看失败原因
}
write()函数
{
size_t write(int fd, const void *addr, size_t count)
参数:
fd: 文件描述符
addr: 数据首地址
count: 写入数据的字节个数
返回值:
成功:返回实际写入数据的字节个数
失败:返回-1,可以利用perror去查看失败原因
}
read()函数
{
size_t read(int fd, const void *addr, size_t count)
参数:
fd: 文件描述符
addr: 内存首地址
count: 读取的字节个数
返回值:
成功:返回实际读出数据的字节个数
失败:返回-1,可以利用perror去查看失败原因
}
remove()
{
int remove(const char *pathname)
参数:
pathname: 文件的路径名+文件名
返回值:
成功:返回0
失败:返回-1,可以利用perror去查看失败原因
}
ioctl()函数
{
}
}
四、系统调用与库函数
{
1.有些库函数不需要调系统调用
2.系统调用需要由用户态切到内核态,消耗系统资源与时间
3.单次调用,系统调用效率更高
4.频繁调用,由于缓冲区的存在,库函数的效率会更高
}