公告-无限期停更
公告-停更博主要参加27考研,不打算二战,且本科课程学得稀烂,遂开始逐步复习。本博客主要记录信息安全相关主题,大概考前不打算继续学习技术相关。
(考前也可能会诈尸
Linux编程入门-系统选项
Linux编程入门-系统选项系统限制常用系统限制如下,部分不存在运行时恒定值,部分运行时可增加值规则变化而省略。运行时恒定值通常在limits.h中定义,运行时可增加值用sysconf/pathconf等获取。例如当某限制名为XXX_MAX时,其最小值的运行时恒定值格式一般为_POSIX_XXX_MAX,运行时可增加值格式一般为_SC_XXX_MAX。可用命令行工具getconf获取系统中已实现的运行时恒定值,开发时可用autoconf等工具确定各种系统特性及限制存在与否、如何设置,并生成头文件。
运行时恒定值
运行时可增加值
描述
ARG_MAX
提供给exec的argv和environ所占空间之和最大字节数
_SC_CLK_TCK
times度量单位
LOGIN_NAME_MAX
登录名最大长度,含终止空字符
OPEN_MAX
进程同时可打开的文件描述符的最大数量
NGROUPS_MAX
进程所属辅助组ID数量最大数
_SC_PAGESIZE或_SC_PAGE_SIZE
一个虚拟内存页大小
RTSIG_MAX
单一实时信号 ...
Linux编程入门-时间
Linux编程入门-时间日历时间时间分为真实时间和进程时间。真实时间分为日历时间和流逝(或挂钟)时间。日历时间的起点时某个标准点,这里是自Epoch以来的秒数。流逝时间的起点是进程生命周期内某个固定时点,如进程启动时。进程时间指一个进程使用的CPU时间总量。
gettimeofday/settimeofday/adjtimegettimeofday获取日历时间。settimeofday立即修改系统时间。adjtime缓慢逐步调整系统时间,大约每2000秒变化1秒。
1234567891011121314151617#include <sys/time.h>struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */};int gettimeofday( struct timeval *restrict tv, struct timezone *_Nullable restrict ...
Linux编程入门-用户管理与安全
Linux编程入门-用户管理与安全用户和组getpwnam/getpwuid从passwd文件中获取记录。
12345678910111213141516#include <pwd.h>struct passwd { char *pw_name; /* Username. */ char *pw_passwd; /* Hashed passphrase, if shadow database not in use (see shadow.h). */ uid_t pw_uid; /* User ID. */ gid_t pw_gid; /* Group ID. */ char *pw_gecos; /* Real name. */ char *pw_dir; /* Home directory. */ char *pw_shell; /* Shell program. */};struct passwd *ge ...
Linux编程入门-内存管理
Linux编程入门-内存管理堆上分配堆始于进程未初始化数据段末尾,堆的当前内存边界称为“program break”。program break位置抬升后,程序可访问新分配区域内任何内存地址,而此时物理内存页尚未分配。内核在进程首次试图访问这些虚拟内存地址时自动分配新物理内存页。系统虚拟内存页面大小可用sysconf的_SC_PAGESIZE获取。
brk/sbrkbrk将program break设为addr参数的位置,且addr参数实际会四舍五入到下一个内存页边界处。sbrk将program break在原有地址上增加increment大小。increment为0表示不改变位置,仅获取program break当前位置。
1234567#include <unistd.h>int brk( void *addr); //成功0 否则-1void *sbrk( intptr_t increment); //成功返回之前program break 否则(void*)-1
malloc/freemalloc在堆上分配size字节大小的内存,返 ...
Linux编程入门-进程
Linux编程入门-进程进程号系统允许的最大进程号为“/proc/sys/kernel/pid_max”文件数值-1。查看“/proc/PID/status”文件的PPid字段可获知每个进程的父进程。若某个子进程的父进程终止,则init进程收养该进程,后去getppid返回进程号1。
查看“/proc/PID/cmdline”文件可读取任意进程命令行参数,程序也可用“/proc/self/cmdline”访问自己的命令行参数。GNU C语言库也有提供全局变量:
1234#define _GNU_SOURCE#include <errno.h>extern char *program_invocation_name; //调用该程序的完整路径名extern char *program_invocation_short_name; //不含目录的程序部分
getpid返回调用进程的进程号:
12#include <unistd.h>pi ...
Linux编程入门-文件I/O
Linux编程入门-文件I/O碎碎念获取glibc版本:
12#include <gnu/libc-version.h>const char *gnu_get_libc_version(void);
错误处理:
123void perror(const char *s); //打印错误信息#include <string.h>char *strerror(int errnum); //根据errnum错误码获取描述字符串
通用I/O模型C语言标准中的文件操作这里略。
open打开一个已存在的文件或创建并打开一个新文件:
1234567#include <sys/stat.h>#include <fcntl.h>int open( const char *pathname, //要打开的文件 或符号链接 int flags, //访问模式 ...); //成功返回一文件描述符 错误-1 错误标志errno
新建文件的访问权限可能还受进程umask和父目录默认访问控制列表的影响。常用文件访问标志如下 ...
基础劳动法入门
基础劳动法入门扫盲知识劳动争议是指劳动者和用人单位,在执行劳动法律、法规或履行劳动合同过程中,就劳动权利和劳动义务所产生的争议。劳动者维权的机构有:
机构
解释
劳动争议调解委员会
用人单位内部设立,由职工代表、用人单位代表和工会代表组成,主任由工会代表担任。劳动者可向劳动争议调解委员会申请调解。
工会
工会是中国共产党领导的职工自愿结合的工人阶级群众组织。劳动者可向用人单位所所在地区工会投诉或申请调解。
劳动监察部门
劳动保障行政部门实施劳动保障监察,设有劳动监察部门或劳动保障监察员。劳动者可向劳动监察部门投诉或举报。
劳动争议仲裁委员会
劳动争议仲裁委员会依法受理劳动争议案件。劳动者可向劳动合同履行地或用人单位所在地的劳动争议仲裁委员会申请仲裁或调解。
人民法院
劳动争议案件由劳动争议仲裁委员会所在地人民法院受理。劳动者对仲裁裁决不服可向人民法院提起诉讼。
处理劳动争议时,必须先向劳动争议调解委员会走协商和解程序与内部调解程序,再向劳动争议仲裁委员会申请仲裁,最后向人民法院提起一审和二审。
维权时劳动者需要自己收集证据,如影音证据、实物证据和电子证据 ...
C++后端开发入门-FTP服务器与Libevent初探
C++后端开发入门-FTP服务器与Libevent初探环境准备安装Libevent:
1sudo apt install libevent-dev
安装后需要在Visual Studio 2022的“跨平台”下的远程标头IntelliSense管理器中将目标主机更新,并在项目属性链接器的“库依赖项”中添加“event”表示链接libevent.so,换作命令行为:
1gcc test.c -o test -I /usr/include -levent
Libevent入门用event_init初始化Libevent:
123#include <event2/event-config.h>#include <event.h>struct event_base *event_init(void);
用event_set初始化event事件,设置回调函数和关注的事件:
123456789#define evutil_socket_t intvoid event_set( struct event *ev, //执行要初始化的event对象 evuti ...
C++后端开发入门-HTTP服务器编程
C++后端开发入门-HTTP服务器编程环境配置先安装并关闭防火墙,安装Iperf工具:
1234sudo apt install firewalld iperf curlsudo systemctl stop firewalldsudo systemctl disable firewalldsudo firewall-cmd --status #not running
iperf的使用如下,Windows下有Jperf:
1234567#测试TCPsudo iperf -s -i 1 -w 1M #服务端运行 间隔1s TCP窗口尺寸为1Msudo iperf -c xxx.xxx.xxx.xxx -i 1 -w 1M #客户端运行#测试UDPsudo iperf -u -s #服务端运行sudo iperf -u -c xxx.xxx.xxx.xxx -b 900M -i 1 -w 1M -t 60 #客户端运行 带宽数量为900M(千兆链路的90%) 测试60s
接下来尝试搭建Apache:
123sudo apt install apache2sudo systemctl s ...