• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

sm1le

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

系统编程

文件操作:
1.open&close函数:
包含头文件:
  #include <unistd.h> open函数头文件
  #include <fcntl.h> 参数头文件
  #include <errno.h> 错误信息头文件,strerror(errno)显示错误信息

int fd = open(文件名,参数,权限);
参数包括:O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL等,参数可以多个,之间用 | 隔开
close(int fd);

2.read&write函数:
int n = read(fd, 缓冲区数据,缓冲区);
return 0为读到文件末尾,n为读到的字节数,-1为错误
int n = write(fd, 缓冲区数据,数据大小);
return n为读到的字节数,-1为错误

3.lseek函数:
off_t lseek(int fd, off_t offset, int whence)
fd:文件描述符 offset:偏移量 whence:偏移起始位置:SEEK_SET/SEEK_CUR/SEEK_END
return 成功:较起始位置便宜量   失败:-1 errno
注意:1.文件读和写共用一个偏移位置
   2.lseek能获取大小:lseek(fd, 0, SEEK_END);
   3.lseek拓展文件/truncate函数直接拓展

目录操作:
包含头文件#include<dirent.h>
1.opendir函数:
DIR* opendir(char* name);

2.closedir函数:
int closedir(DIR* dp);

3.readdir函数:
struct dirent* readdir(DIR* dp);

重定向函数:
int dup(int oldfd);
返回新文件描述符
int dup2(int oldfd, int newfd);

exec函数族:
1.int execl(file, argv,....,NULL);
进程执行file命令,一般是系统命令如ls,ps等,且argv[0]为file命令本身

2.int execlp(path, argv,....,NULL);
进程执行path路径下的文件

wait函数:
1.pid_t wait(int* status);
阻塞等待子进程退出
status为传出参数,通过status了解状态

2.pid_t waitpid(pid_t pid, int* status, int options);
传入参数pid:>0指定某个子进程进程,-1为任意子进程
返回值:

0:成功回收的pid
=0:参数三指定为WNOHANG,并且子进程没有结束
-1:回收失败

管道:
实现原理:内核通过环形队列实现
int pipe(int pipefd[2]);创建并打开管道
参数:pipefd[0]:读端 、pipe[1]:写端
返回值:成功0,失败-1

读写行为:
1.读管道:
  (1)管道有数据:read返回读到的字节数
  (2)管道无数据:1)无写端:返回0; 2)有写端:read阻塞等待
2.写管道:
  (1)无读端:异常终止
  (2)有读端:1)管道满:write阻塞等待; 2)未满:返回写的字节数

有名管道:
包含头文件#include <sys/stat.h>
int mkfifo(const char* pathname, mode_t mode);
参数:pathname:管道名; mode:权限

共享存储映射:
包含头文件#include <sys/mman.h>
创建:
void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);
参数:
addr:指定映射区的首地址,一般为NULL
length:共享存储映射区的大小,<=文件大小
prot:共享内存映射区读写属性,读:PROT_READ、写:PROT_WRITE、读写:PROT_READ|PROT WRITE
flags:标注共享内存的属性,共享:MAP_SHARED、私有:MAP_PRIVATE、匿名:MAP_ANON(此时fd传-1,只能用于血缘关系进程通信)
fd:用于创建共享内存映射区文件的文件描述符
offset:偏移位置,为4k整数倍
返回值:成功:映射区首地址; 失败:MAP_FAILED(void* -1)

释放:
int munmap(void* addr, size_t length);
参数:编号、名称、事件、默认处理动作
addr:mmap返回值,禁止++操作
length:大小
返回值:成功:0;失败:-1

信号:
四要素:
编号、名称、事件、默认动作

1.kill函数:给指定进程发送信号,不一定杀死
int kill(pid_t pid, int signal);
pid:>0 指定进程、=0 同组所有进程、<0 取绝对值发送给进程组、=-1所有进程

2.alarm函数:自然计时
unsigned int alarm(unsigned int second);
返回上次定时剩余时间,无错误现象

3.setitimer函数:
int setitimer(int which, const struct itimerval* new_value, struct itimerval* old_value);
返回值:成功0,失败-1
which:定时方式
new_value:定时秒数
old_value:传出参数

信号集操作函数:
sigset_t set :自定义信号集
sigemptyset(sigset_t* set);清空信号集
sigfillset(sigset_t* set);全置1
sigaddset(sigset_t* set, int signum);添加一个信号到信号集
sigdelset(sigset_t* set, int signum);移出一个信号
sigismember(const sigset_t* set, int signum);判断一个信号是否在信号集中,在返回1,不在返回0

设置信号集屏蔽字和解除屏蔽:
int sigprocmask(int how, const sigset_t* set, sigset_t* oldset);
how:设置阻塞SIG_BLOCK; 取消阻塞SIG_UNBLOCK;自定义set替换maskSIG_SETMASK
set:自定义set
oldset:旧的mask

查看未决信号集:
int sigpending(sigset_t* set);
set:传出的未决信号集

posted on 2022-04-29 21:21  sm1le  阅读(92)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3