Linux: 调用接口

进程相关

获取进程id与创建进程

  • 头文件: <unistd.h>
  • getpid() : 获取进程id
  • getppid() : 获取父进程的id
  • fork() : 创建子进程, 给父进程返回子进程的id, 给子进程返回0

等待子进程

  • 头文件: <sys/types.h>   <sys/wait.h>
  • pid_t wait(int*status);
    • 返回值: 成功返回被等待的进程id, 失败返回-1

  • pid_ t waitpid(pid_t pid, int *status, int options);
    • 返回值: 成功返回收集到的子进程id失败返回-1.
    •  参数:
      • Pid : -1表示等待任一个子进程
      • status : 获取状态码
      • options : 默认为0(阻塞等待). 为WNOHANG,当没有可等待的进程返回0

替换函数

  • int execl(const char *path, const char *arg, ...);
  • int execlp(const char *file, const char *arg, ...);
  • int execle(const char *path, const char *arg, ...,char *const envp[]);
  • int execv(const char *path, char *const argv[]);
  • int execvp(const char *file, char *const argv[]);     
  • int execve(const char *path, char *const argv[], char *const envp[]);

名称解释:

  • l(list) : 表示参数采用列表
  • v(vector) : 参数用数组
  • p(path) : 有p自动搜索环境变量PATH
  • e(env) : 表示自己维护环境变量

返回值:出错返回-1, 成功没有返回值(已经替换)
 

文件相关

文件开关读写

  • 头文件: <sys/types.h>,  <sys/stat.h> ,  <fcntl.h>
  • int  open(const char *pathname, int flags);
  • int  open(const char *pathname, int flags, mode_t mode);
  • ssize_t  write(int fd, const void *buf, size_t count);
  • ssize_t  read(int fd,  void *buf, size_t count);
  • int  close(int fd);
    • 参数flags: O_APPEND  O_CREATE  O_TRUNC等  flags:选项标记位

重定向

  • int dup2(int oldfd, int newfd); 将newfd文件描述符复制为oldfd
  • 失败返回 -1

通信相关

匿名管道

  • 头文件:<unistd.h>
  • int pipe(int fd[2]);
  • 返回值:成功返回0,失败返回错误代码

命名管道

  • 头文件: <sys/types.h> <sys/stat.h>
  • int mkfifo(const char* pathname , mode_t mdoe)
  • 返回值: 创建成功: 0 创建失败: -1

共享内存

  • 头文件: <sys/ipc.h> <sys/shm.h>
  • key_t ftok(const char *pathname, int proj_id);  用于创建IPC对象的键值
  • int shmget(key_t key, size_t size, int shmflg); 用来创建共享内存
  • void *shmat(int shmid, const void *shmaddr, int shmflg);  将共享内存段连接到进程地址空间
  • int shmdt(const void *shmaddr);  将共享内存段与当前进程脱离
  • int shmctl(int shmid, int cmd, struct shmid_ds *buf); 用于控制共享内存

信号相关

信号的产生

  • 系统调用
    • int kill(pid_t pid, int signo); 向指定进程发送指定信号  头文件: <signal.h>
    • int raise(int signo); 给当前进程发送指定的信号   头文件: <signal.h>
    • void abort(void);  使当前进程接收到信号而异常终止 头文件: <stdlib.h>
  • 软件条件
    • unsigned int alarm(unsigned int seconds);
    • 告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动作是终止当前进程

信号的处理

  • sighandler_t signal(int signum, sighandler_t handler); //回调函数
  • typedef void (*sighandler_t)(int); //函数指针
  • int sigaction(int signo,const struct sigaction *act,struct sigaction *oact);
    • 可以读取和修改与指定信号相关联的处理动作

信号集操作函数

  • int sigemptyset(sigset_t *set); 初始化set所指向的信号集,使其中所有信号的对应bit清零
  • int sigfillset(sigset_t *set);初始化set所指向的信号集,使其中所有信号的对应bit置位,
  • int sigaddset (sigset_t *set, int signo);
  • int sigdelset(sigset_t *set, int signo);
  • int sigprocmask(int how, const sigset_t *set, sigset_t *oset);读取或更改进程的阻塞信号集 
  • int sigpending(sigset_t *set); 读取当前进程的未决信号集,通过set参数传出

多线程相关

头文件: <pthread.h>

控制线程

  • int pthread_create(pthread_t *thread, const pthread_attr_t *attr,                                                                 void *(*start_routine) (void *), void *arg); 创建线程
  • int pthread_join(pthread_t thread, void **retval);  等待线程
  • void pthread_exit(void *value_ptr); 终止线程
  • int pthread_cancel(pthread_t thread); 取消一个执行中的线程
  • int pthread_detach(pthread_t thread); 线程分离

互斥锁

  • int pthread_mutex_init(pthread_mutex_t *mutex)函数进行初始化
  • int pthread_mutex_lock(pthread_mutex_t *mutex)进行加锁(阻塞式)
  • int pthread_mutex_trylock(pthread_mutex_t *mutex)(非阻塞式)
  • int pthread_mutex_unlock(pthread_mutex_t *mutex)进行解锁
  • int pthread_mutex_destroy(pthread_mutex_t *mutex)进行销毁

条件变量

  • int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
  • int pthread_cond_destroy(pthread_cond_t *cond);
  • int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);
  • int pthread_cond_signal(pthread_cond_t *cond);唤醒等待在条件变量上的一个线程
  • int pthread_cond_broadcast(pthread_cond_t *cond);唤醒所有等待在条件变量上的线程

信号量

头文件: <semaphore.h>  <pthread.h>

  • int sem_init(sem_t *sem, int pshared, unsigned int value);
  • int sem_destroy(sem_t *sem);
  • int sem_wait(sem_t *sem);
  • int sem_post(sem_t *sem);释放信号量,将信号量的值加1,唤醒等待该信号量的线程

套接字相关

头文件:<sys/types.h>  <sys/socket.h>  <arpa/inet.h>  <netinet/in.h>

创建连接

  • int socket(int domain, int type, int protocol);创建 socket 文件描述符
  • int bind(int socket, const struct sockaddr *address,socklen_t address_len);绑定端口号
  • int listen(int socket, int backlog); 开始监听socket(TCP, 服务器)
  • int accept(int socket, struct sockaddr* address,socklen_t* address_len);接收请求 (TCP,服务)
  • int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);建立连接 (TCP,客户)
  • int close(int sockfd): 关闭与客户端的连接

通信

  • ssize_t send(int sockfd, const void* buf, size_t len, int flags); 通过套接字发送数据TCP服/客
  • ssize_t recv(int sockfd, const void* buf, size_t len, int flags);  通过套接字读数据TCP服/客
  • ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,                                                                          const  struct sockaddr *dest_addr, socklen_t addrlen); UDP,服务/客户,发数据
  • ssize_t recvfrom(int sockfd, void* buf, size_t len, int flags,                                                                                struct sockaddr *src_addr, socklen_t *addrlen);            UDP, 服务/客户,读数据
  • FILE* popen(const char* command, const char *type);                        UDP, 服务, 处理数据

多路复用相关

select

  • 头文件: sys/select.h
  • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,                                                  struct timeval  timeout) 监视文件描述符集合中的文件描述符
  • void FD_ZERO(fd_set *set) 将文件描述符集合 set 清空
  • void FD_SET(int fd, fd_set *set) 将文件描述符 fd 添加到文件描述符集合 set 中
  • void FD_CLR(int fd, fd_set *set) 将文件描述符 fd 从文件描述符集合 set 中移除
  • int FD_ISSET(int fd, fd_set *set) 检测文件描述符 fd 是否在文件描述符集合 set 中

poll

  • 头文件:poll.h
  • int poll(struct pollfd *fds, nfds_t nfds, int timeout) 监视一组文件描述符的状态变化
    • struct pollfd { int fd; // 文件描述符 short events; // 期望的事件short revents; // 实际发生的事件 
      }

epoll

  • 头文件:sys/epoll.h
  • int epoll_create(int size) 用于创建一个 epoll 实例,返回一个文件描述符
  • int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)控制 epoll 实例上的文件描述符
    • op:EPOLL_CTL_ADD(将 fd 添加到 epoll 实例中)EPOLL_CTL_MOD(修改已添加的 fd 在 epoll 实例上的事件)EPOLL_CTL_DEL(从 epoll 实例中删除 fd)fd 是待操作的文件描述符
      event是epoll_event 结构体指针,用于指定待添加或修改的事件
  • int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)等待事件发生
    • struct epoll_event { __uint32_t events; // 事件类型 epoll_data_t data; // 用户数据 
      };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧拉openeuler23.09默认软件源太慢了,修改为华为云更新源,附上具体配置内容。

因为是直接在原有的文件基础上修改的&#xff0c;所以有一些不需要的内容我用#号屏蔽掉了。 #generic-repos is licensed under the Mulan PSL v2. #You can use this software according to the terms and conditions of the Mulan PS L v2. #You may obtain a copy of Mulan…

2000-2021年各省外商直接投资水平面板数据(含原始数据+计算结果)(无缺失)

2000-2021年各省外商直接投资水平面板数据&#xff08;含原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;外商直接投资额&#xff08;万美元&#xff09;、外商直接投资额&#xff08;万元&#xff09;、国…

代码随想录 二叉树—二叉树的最大深度

思路&#xff1a;depth初始为0&#xff0c;要是有子孩子就depth加1&#xff0c;循环过了之后最后一个没子孩子&#xff0c;depth也会加1&#xff0c;弥补了先开始的0。简单题&#xff0c;模板略微改一点。 题解c&#xff1a; /*** Definition for a binary tree node.* struc…

lv17 安防监控实现之通信协议制定 2

项目功能框架分层 ***************************************************** 分层分析&#xff1a; ***************************************************** web网页端显示部分&#xff1a; 环境信息摄像头采集图像&#xff1a; 硬件控制&#xff1a; A9数据处理部分 A9-Z…

Linux下最常用的MySQL运维脚本

MySQL是一个广泛用于Web应用程序和服务器的开源关系型数据库管理系统。在Linux环境中&#xff0c;运维MySQL数据库可能涉及到许多日常任务&#xff0c;如备份、性能优化、监控等。为了提高效率&#xff0c;许多运维工作可以通过编写脚本来自动化执行。本文将介绍一些在Linux下最…

Leetcode64. 最小路径和

Problem: 64. 最小路径和 文章目录 思路解题方法复杂度Code 思路 动态规划,偷房子问题变形 解题方法 dp[i][j] min(dp[i-1][j],dp[i][j-1])grid[i][j]; 复杂度 时间复杂度: O ( m ∗ n ) O(m*n) O(m∗n) 空间复杂度: O ( m ∗ n ) O(m*n) O(m∗n) Code class Solution { pub…

leetcode代码记录(动态规划基础题(斐波那契数列)

目录 1. 题目&#xff1a;2. 斐波那契数列&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a…

[LeetCode][LCR173]点名——二分结合输入数据特点找边界

题目 LCR 173. 点名 某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席&#xff0c;请返回他的学号。 示例 1&#xff1a; 输入&#xff1a;records [0,1,2,3,5] 输出&#xff1a;4 示例 2&#xff1a; 输入&#xff1a;records [0, …

王道c语言-判断对称数,sprintf应用

Description 输入一个整型数&#xff0c;判断是否是对称数&#xff0c;如果是&#xff0c;输出yes&#xff0c;否则输出no&#xff0c;不用考虑这个整型数过大&#xff0c;int类型存不下&#xff0c;不用考虑负值 方法一 取余乘位权 #include <stdio.h> int main() {i…

TensorFlow的介绍和简单案例

TensorFlow是一个开源的机器学习框架,由Google开发和维护。它旨在使构建和训练机器学习模型变得更加容易,同时提供高度灵活性和可扩展性。 TensorFlow基于数据流图的概念。数据流图是一个由节点和边组成的有向图,其中节点表示操作,边表示数据的流动。TensorFlow通过在数据…

YOLOv9更换iou|包含CIoU、DIoU、MDPIoU、GIoU

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 更换YOLOv9中使用的Iou计算方式&#xff0c;目前支持CIoU、DIoU、MDPIoU、GIoU。 二、Iou模块详解 2.1 模块简介 Iou的主要思想&…

<JavaEE> 数据链路层 -- 以太网协议、MTU限制、ARP协议

目录 以太网协议 什么是以太网&#xff1f; 以太网的帧格式 什么是MAC地址&#xff1f; MAC地址和IP地址的对比&#xff1f; MTU&#xff08;最大传输单元&#xff09;限制 什么是MTU限制&#xff1f; MTU对IP协议有什么影响&#xff1f; MTU对UDP协议有什么影响&…

HDOJ 2034

人见人爱A-B Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目&#xff0c;就是{A}{B}&#xff0c;那个题目求的是两个集合的并集&#xff0c;今天我们这个A-B求的是两个集合的差&#xff0c;就是做集合的减法运算。&#xff08;当然&#xff0c;…

pre_min[0:10, 2:3] = pre和pre_min[0:10, 2] = pre区别

在NumPy中&#xff0c;数组切片的语法非常具体&#xff0c;它决定了哪些元素被选取或赋值。对于您提到的两个切片表达式&#xff0c;pre_min[0:10, 2:3] 和 pre_min[0:10, 2]&#xff0c;它们有本质的区别&#xff0c;主要体现在所选的维度和形状上。 pre_min[0:10, 2:3]:这个…

微服务:Bot代码执行

每次要多传一个bot_id 判网关的时候判127.0.0.1所以最好改localhost 创建SpringCloud的子项目 BotRunningSystem 在BotRunningSystem项目中添加依赖&#xff1a; joor-java-8 可动态编译Java代码 2. 修改前端&#xff0c;传入对Bot的选择操作 package com.kob.botrunningsy…

【SpringBoot3】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

云备份项目2

云备份项目 文章目录 云备份项目4. 服务端代码设计4.1 服务端工具类实现4.1.1 文件实用工具类设计4.1.2 Json实用工具类设计 4.2 服务端配置信息模块实现4.2.1 系统配置信息4.2.2 单例文件配置类设计 4.3 服务端数据管理模块实现4.3.1 备份数据类的实现4.3.2 数据管理类的设计 …

Js输入输出语句

输入语法 prompt("您想输入的是&#xff1f;")输出语法: 语法1: document.write(‘要出的内容’&#xff09; <body><script>document.write("你好")document.write("<h1>我是<h1>")</script> </body>作…

Yaml格式解析

文章目录 YAML格式介绍YAML格式解析 YAML格式介绍 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种常用于配置文件的人类可读的数据序列化标准。它通常用于存储和传输数据&#xff0c;并且由于其简洁性、可读性和易于编写的特性&#xff0c;它经常被用于编写配…

frida主动调用函数获得数据保存写入到txt文件

1、获取数据到手机内存 function main(){Java.perform(function () {var result "";var flag true;var JavaString Java.use("java.lang.String");Java.choose("cn.xxx.xxxxx", {onMatch : function(instance) {for(var i 1;i<1000;i){if(…