主页

Linux信号的系统调用与示例

写在前面 总结一下信号处理部分的系统调用与示例 信号基础 简介 信号(signal), 又称软件中断, 是系统中事件发生时对进程的通知机制. 也正是这种通知机制, 打断了程序执行的正常流程, 所以其与硬件中断很相似. 一个具有合适权限的进程可以向另一进程发送信号, 所以信号可以作为一种进程间通信方式(IPC). 同时, 进程也可以向自身发送信号, 一些常见的引发内核为进程产生信号的各类事件如下: 硬件异常: 硬件错误, 内存访问错误(段错误), 除零异常等 特殊字符: 用户输入了Ctrl+C或者Ctrl+Z或者Ctrl+\. 软件事件: 调整程序窗口大小, 进程定时器到期, 进程运行时间超限. 在signal.h头文件中详细定义了上述提到的各种信号以及符号...

阅读更多

Linux内存管理部分系统调用与示例分析

写在前面 总结Linux系统调用的内存分配与虚拟内存管理部分, 包括堆内存和栈内存的操作, 分配, 释放等. 参考: Linux/Unix系统编程手册第六/七章. 基本系统调用: brk/sbrk C库函数: malloc/realloc/calloc/alloca/free 虚拟内存管理 简介 首先来看进程的内存布局, 如下图: 但是实际上, 这个布局并不是真实存在物理内存中的, 而是位于虚拟内存中. 利用访问局部性以追求高效地使用CPU和RAM(物理内存, 随机访问存储器)资源. 所谓访问局部性, 可以表现为以下两种情况: 时间局部性: 程序倾向于在不久的将来再次访问最近刚访问过的内存地址(例如循环) 空间局部...

阅读更多

Ssh在本地和远程服务器之间传送文件的命令总结(scp,rsync)

写在前面 关于云服务器, 之前介绍过不少文章, 但是当时依赖于一个名叫Termius的ssh图形化客户端, 好像是只有MacOS有, 传送文件只需要拖拽即可, 后来发现还是要多学点命令来完成文件传输才行, 下面来看看用scp以及rsync在本地和远端传送文件/文件夹的一些方法. 环境: 物理主机: MacOS12.6 M1 服务器(云主机): Ubuntu 20.04 x86_64 参考: 通过 SSH 在远程和本地系统之间传输文件的 4 种方法 - 腾讯云开发者社区-腾讯云 (tencent.com); 准备工作: 配置ssh免密登录 参考: SSH 三步解决免密登录_jeikerxiao的博客-CSDN博客_ssh...

阅读更多

Linux进程间通信类系统调用总结与示例

写在前面 基本方法 通信:关注进程之间的数据交换 数据传输: 管道, FIFO, socket 伪终端 消息队列(POSIX/System V) 共享内存: 共享内存(POSIX/System V) 内存映射 同步:关注进程和线程操作之间的同步, 有以下四种主要形式: 信号量(POSIX/System V) 文件锁 互斥(线程) 条件变量(线程) 信...

阅读更多

Linux共享库,静态库与相关系统调用,工具的使用总结

写在前面 总结Unix/Linux操作系统的共享库/静态库部分, 以及一些系统调用. 参考Linux/UNIX系统编程手册41-42章. 测试程序均在Ubuntu下使用cc(gcc-9)运行成功. $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/...

阅读更多

Linux系统信息类系统调用总结与示例

进程基本信息 环境变量: getenv与environ 下面代码列出了三种获取全部环境变量的方法: #include <stdio.h> #include <stdlib.h> void t1() { printf("LANG=%s\n", getenv("LANG")); printf("PWD=%s\n", getenv("PWD")); printf("SHELL=%s\n", getenv("SHELL")); } extern char** environ; void t2() { int i = 0; while (environ[i] != NULL) printf("environ[%d]=%s\...

阅读更多

Windows10文件夹打不开提示位置不可用的解决方案

写在前面 用阿里云盘下载点东西, 但是发现双击文件夹之后会出现下面的情况: 这里就是一个例子. 那么问题出在哪呢? 网上的一个解决方案是重启资源管理器, 但是并不管用, 然后就是改注册表. 但是改注册表的前提是桌面文件夹路径没有修改过, 由于我很早就将桌面的路径放在机械盘了(D:), 于是就不能用这个方案了. 正在我百思不解之时, 突然想起来前阶段安装的wsl子系统, Ubuntu20.04, 联想到之前的一个老师说过, Windows的一些问题可以通过Linux来解决, 那么说干就干, 看看下面的解决方案. 方案 首先你需要有任意一个wsl的Linux发行版安装, 然后进入出现问题的路径: wsl cd /mnt/d/aaaDesktop/files mv...

阅读更多

Homebrew更新后出现curl (35) libressl ssl_connect ssl_error_syscall的解决方法

问题 brew更新之后, 使用brew outdated --cask会出现下面的错误: curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to formulae.brew.sh:443 或者说应该是一个警告, 那么怎么解决呢? 一开始以为是代理的问题, 关掉之后也不行, 后来看到了Stack Overflow的方案, 很不错, 在此记录一下. 解决方案 networking - Homebrew gives SSL error (SSL_ERROR_SYSCALL) on home network - Super User; brew update fails if ...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits