一、通用的I/O模型
基础的系统调用函数:
//打开文件
int open(const char *pathname, int flags, .../* mode_t mode */);
//读取文件内容
ssize_t read(int fd, void *buffer, size_t count);
//写入文件
ssize_t write(int fd, void *buffer, size_t count);
//关闭文件
int close(int fd);
//改变文件偏移量
off_t lseek(int fd, off_t offset, int whence);
//创建文件(不常用)
int creat(const char *pathname, mode_t mode);
//额外操作
int ioctl(int fd, int request, .../* argp */);
- 打开文件: pathname为文件路径,flags表打开方式,只读只写读写,还有文件不存在时是否创建等,mode在不创建新文件时可省略,创建新文件时表示新文件的访问权限,返回值为文件描述符,打开失败返回-1。
- 读取文件内容: buffer存读取的文件内容,count为至多读取的字节数,返回值为实际读取的字节数,失败返回 -1。
- 写入文件: buffer存将要写入的内容,count从buffer中读取的字节数,返回值实际写入的字节数,有可能小于count,失败返回-1。
- 关闭文件: 返回值关闭成功返回0,失败返回-1。
- 改变文件偏移量: offset为偏移的字节数,可正可负,whence 可以是SEEK_SET / SEEK_CUR / SEEK_END,分别表示相对于起始字节、当前偏移量、最后一个字节的下一个字节。比如lseek(fd, -1, SEEK_END); 表示指向最后一个字节。成功返回新的文件偏移量,失败返回-1。
- 创建文件: pathname创建的文件路径,mode 为权限掩码。如文件存在则会将文件清空。返回文件描述符,失败返回-1。
- 额外操作: 待补充。。
二、进程
基础的系统调用函数:
#include <unistd.h>
pid_t getpid(void); //获取本进程的进程ID
pid_t getppid(void); //获取父进程的进程ID
除少数系统进程,一般进程号和进程没有固定关系。Linux内核限制进程号不大于32767(在较新的版本中,可以修改/proc/sys/kernel/pid_max调整进程号上限),达到限制时重置进程号计数器为300。