主页

利用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...

阅读更多

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