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 ...
共计 492 篇文章,62 页。
您是Zorch的第 个小伙伴
Hits