利用windows+cygwin安装lammps+voro的完整安装方法
写在前面
最近有朋友问我如何安装一个叫做voro++的工科分析软件, 由于这个软件年代过于久远(2013), 并且是C++写的, 在win下需要编译安装, 就折腾了一下, 后来发现在Windows下直接安装的LAMMPS不能编译voro, 那么还得先手动编译安装一个LAMMPS, 折腾了好久, 终于完成了..
主要困难的地方还是在cygwin的包管理上, 由于没办法直接通过包管理器来安装(事实上有一个包管理器, 但是还需要一些特殊工具才能安装, 实在是麻烦), 那就只能每次需要什么包, 就从setup程序中选中那些包来安装了…
其次就是编译工具链方面, cmake/Make/gcc/g++/这些工具都是必备的, 甚至检测依赖时候显示FFmpeg和clang-format也是需要的...
Linux进程的创建结束类系统调用总结
写在前面
总结一下Linux系统的进程创建/终止/等待等系统调用, 参考:
Linux/Unix系统编程手册.
下面主要给出例子, 关于函数原型可以参考书中或者man 2 syscall(例如man 2 fork).
测试环境: Ubuntu 20.04 x86_64
gcc-9
进程创建: fork()
用于创建新的进程, 创建出来的新进程称为子进程, 拥有和父进程一样的代码段/数据段/栈段/堆段.
所以创建新进程的资源消耗较大, 后续采用多线程方式可以解决这个问题.
由于这个函数的设计比较奇怪, 有两个返回值, 在父进程中返回子进程的进程ID, 在子进程中返回0, 错误返回-1, 所以可以用下面的语句制定创建子进程之后的进一步操作:
pi...
Linux线程的创建结束类系统调用总结
写在前面
总结一下Linux系统的线程创建/终止/等待等系统调用, 参考:
Linux/Unix系统编程手册.
下面主要给出例子, 关于函数原型可以参考书中或者man 7 pthreads.
测试环境: Ubuntu 20.04 x86_64
gcc-9
为什么需要线程?
进程的限制
多进程往往存在如下限制:
进程间资源难以共享. 因为除去只读代码段, 父子进程并不共享内存, 所以必须采用进程间通信(IPC)的方式交换进程间信息.
调用fork()创建进程的代价很高. 虽然采用写时复制技术(Copy-on-write), 还是免不了造成资源的浪费.
线程的优势
线程之间可以方便/快速地共享信息. 只需将数据复制到共享...
Linux之io多路复用系统调用用法总结与对比
写在前面
之前已经介绍过关于基本文件IO, 目录IO的一些内容, 这些IO模型多为阻塞式IO, 当然也可以实现为非阻塞(通过文件状态标志O_NOBLOCK).
下面介绍三种I/O模型:
I/O多路复用: select, poll
信号驱动I/O: 通过信号机制减少系统资源占用
$\bigstar$epoll: 基于事件的IO模型
I/O初步
磁盘文件是一个特例, 内核采用缓冲区cache加速磁盘I/O请求, 因此一旦请求的数据传输到内核的缓冲区cache, 对磁盘的write()操作将立即返回, 而不是等数据实际写入磁盘才返回(O_SYNC标志), 与之对应的是, read()调用将数据从内核缓冲区cache移动到用户的缓冲区, 如果请求的数据不在内核缓...
C++类的静态成员总结
引子: 类为什么需要静态成员
有时候类需要与它的一些成员与类本身直接相关, 而不是与类的各个对象都保持关联, 这就减少了成员与每一个类的实例对象的联系, 从而降低资源占用. 另一方面, 如果每次都需要重新更新该成员, 使得对象使用新的值, 这时候只需要修改一份该成员.
本文内容参考: cppprimer
声明静态成员
要点
在成员声明之前加上关键字static使得其与类关联在一起
静态成员可以是public或private的, 类型可以是常量, 引用, 指针, 类等
类的静态成员存在于任何对象之外, 对象中不包含任何与静态数据成员有关的数据(这也是为什么需要类内声明, 类外初始化的原因, 静态数据成员均存在于全局...
C++拷贝构造与拷贝赋值的深入探讨
写在前面
总结一下C++类的拷贝构造与拷贝赋值部分, 从基本的示例入手, 一点点介绍拷贝控制与资源管理的一些内容.
参考Cppprimer(第七章:类, 第十三章:拷贝控制), effective C++(55)
类的拷贝赋值运算符
一般流程
先将右侧运算对象拷贝到一个局部临时对象中
拷贝完成后, 销毁左侧运算对象的现有成员(保证内存安全)
将数据从临时对象拷贝到左侧运算对象的成员中.
要点
自赋值的正确性: 保证赋值运算符将对象赋予其自身时能够正确工作.
要做到这一点, 一个好的方法是在销毁左侧运算对象资源之前, 先拷贝右侧运算对象.
大多数赋值运算符组合了析构函数和拷贝构造函...
C++多继承,虚继承部分总结与示例
写在前面
写一下多继承, 虚继承的一些部分, 包括一些例子.
参考cppprimer
多继承
简介
多继承是指从多个直接基类中产生派生类的能力. 多继承的派生类继承了所有父类的属性, 所以会带来一些复杂的问题.
示例1: 多继承用法与调用顺序
#include <string>
#include <iostream>
using namespace std;
class ZooAnimal {
public:
ZooAnimal() { cout << "call ZooAnimal::ZooAnimal()\n"; }
~ZooAnimal() { cout << "call ZooAnimal:...
Macos下载钉钉直播回放视频的python解决方案
写在前面
之前写过一篇关于用Charles抓包下载钉钉直播回放视频的方法, 那会还是可以直接通过FFmpeg下载m3u8链接并且直接合并的, 但是现在直接上FFmpeg会出现403, 所以还是用别的方法来做吧.
后来发现抓包找到的m3u8不是加密视频流, 那就直接下载ts文件然后合并即可.
抓包
Charles代理
Proxy -> macOS Proxy 菜单开启代理
Proxy -> Proxy Settings 菜单,对代理进行配置,需要开启 HTTP 代理——选择 Use HTTP proxy。
安装 Charles 根证书,选择 Help -> SSL Proxying -> Insta...
共计 492 篇文章,62 页。
您是Zorch的第 个小伙伴
Hits