Golang入门学习(18)
Go的第18课——OS模块对进程的操作。
中间歇了一天主要是为ICPC做准备,看ranklist本来感觉能铜,结果打铁,麻了。。
OS模块对进程的操作获取当前进程pid和父进程pid。
12os.Getpid();os.Getppid();
创建一个进程并为进程设置一个属性。
12345678910111213141516171819package mainimport ( "fmt" "os")func main() { fmt.Println(os.Getpid()) fmt.Println(os.Getppid()) attr := &os.ProcAttr{ Dir: "", Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, Sys: nil, } pid ...
Golang入门学习(17)
Go的第17课——OS模块介绍,OS模块读文件
今天goland又报了错误,按照第一篇文章说的网址激活已经失效,因此换了一个方式,这里贴个链接
OS库OS标准库实现了平台无关的编程接口。
创建文件:
1os.Create("test.txt")
创建目录:
12os.Mkdir("test", os.ModePerm)os.MkdirAll("a/b/c/d", os.ModePerm)
两个区别就是 MkdirAll 支持多级目录创建,如果尝试用 Mkdir 去创建多级目录那么不会被执行。
删除文件:
12os.Remove("test")os.RemoveAll("a")
RemoveAll 也是一样,如果 remove 尝试删除一个非空目录,那么不会被运行。
获取工作目录:
1os.Getwd()
修改工作目录:
1os.Chdir("../../")
重命名文件:
1os.Rename("src","dest&quo ...
CS:APP第五章学习
开始学 CSAPP的第五章
逐步更新吧~
2023-01-08 19:00:00 第一次写
2023-01-11 23:00:00 更新新内容
2023-01-12 12:30:00 写完第五章
优化编译器的能力和局限性也懒得去复制书上的东西了,就是告诉了我们编译器在编译代码的时候会对代码做出优化等等之类的,但是我们的优化需要足够安全,我们必须保证在任何情况下,优化和不优化的代码只会带来效率上的差异而不会对任何形式输出的任何结果产生差异。
这一章主要介绍了一个例子
问:
1234int test(int *x,int *y){ *x+=*y; *x+=*y;}
能否用以下程序作为优化
123int test(int *x,int *y){ *x+=2*(*y);}
乍一看好像可以,因为就是 x 所指向的 int 内存加了两次 y,完全可以用,并且对比上下的代码,上面需要进行 6 次访存(读 y,读x,写x,读y,读x,写x),而下面的代码只需要 3 次访存(读y,读x,写x)
感觉很完美,但是实际上是不行的,因为如果 x 和 y 指向 ...
Git学习之路(3)
Git学习之路(3)——分支
分支(branch)为什么使用分支
如果你希望为项目增加新特性,但很可能会影响当前可正常工作的代码。对于该项目的活跃用户而言,这是很糟糕的事情。与其将特性加入到其它人正在使用的master分支,更好的方法是在仓库的其它分支中变更代码。
更重要的是,Git其设计用于协作。如果所有人都在你代码仓库的master分支上操作,会引发很多混乱。对编程语言或项目的知识和阅历因人而异;有些人可能会编写有错误或缺陷的代码,也可能会编写你觉得不适合该项目的代码。使用分支可以让你核验他人的贡献并选择适合的加入到项目中。(这里假设你是代码库唯一的所有者,希望对增加到项目中的代码有完全的控制。在真实的项目中,代码库有多个具有合并代码权限的所有者)
使用分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支常用命令查看当前分支1git branch -v
创建分支1git branch branch_name
删除分支1git branch -d branch_n ...
Git学习之路(2)
Git学习之路(2)——Git的常见命令以及配置
Git常用命令这里记一下常见的 Git 命令以及它的作用:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git@192.168.1.119:ndshow git push origin master 将文件给推到服务器上git remote show origin 显示远程库origin里的资源git push origin master:develop git push origin master:hb-dev 将本地库与服务器上的库进行关 ...
开发操作系统(2)
开发OS的第二天
&学习Makefile
编写NAS汇编文件这里附件给的源文件已经是纯粹的汇编代码+数据组成了。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061; hello-os; TAB=4 ORG 0x7c00 ; 指明程序装载地址; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code JMP entry DB 0x90 DB "HELLOIPL" ; 启动扇区名称(8字节) DW 512 ; 每个扇区(sector)大小(必须512字节) DB 1 ; 簇(cluster)大小(必须为1个扇区) DW 1 ; FAT起始位置(一般为第一个扇区) DB 2 ; FAT个数(必须为2) DW 224 ; 根目录大小(一般为224项) DW 2880 ; ...
Git学习之路(1)
Git学习之路(1)——Git的基本用法
就是多学学对自己有用的东西吧
水一章为敬!
什么是GitWIKI:
在程序设计中,分布式版本控制(英语:distributed revision control 或 distributed version control,又译为分布式版本控制),又称去中心化版本控制(decentralized version control),是一种版本控制的方式,它允许软件开发者可以共同参与一个软件开发项目,但是不必在相同的网络系统下工作。其作法是在每个开发者电脑中复制一份完整的代码库以及完整历史[1]。因此在无法连接网络时,仍可以进行软件的分支及合并,可以加速大部分的作业,增加此情形可以进行的工作,而且系统的代码库可以在多家电脑上备份,不需靠单一位置的备份。而多个位置的代码库再透过其他机制来达到同步。
以分布式版本控制方法,作出的软件版本控制系统,称为分布式版本控制系统(distributed revision control system,缩写为DRCS,或是distributed version control system,缩写为DVCS)。著 ...
Golang入门学习(16)
Go的第16课——timer,ticker
Timer开启定时任务Timer顾名思义,就是定时器的意思,可以实现一些定时操作,内部也是通过channel来实现的。
虽然可以使用 sleep 实现,但是这个对象可以让我们细化到某个操作到某个操作之间间隔确定的时间,比如我的顺序是要求 A B C,要求 A 和 C 至少间隔两秒的时间。如果使用 sleep 的话就不太方便操作,因为 B 也会消耗一定时间,如果直接 sleep 2 可能会导致等待多余的时间,那么我们就可以在A事件开始后设定 timer,在 C 开始前读出 timer 的 channel,这样就可以保证了,而且写法非常简便。
1234567891011121314151617package mainimport ( "fmt" "time")func main() { timer := time.NewTimer(time.Second * 2)//创建定时器 fmt.Printf("time:%v\n", time.Now()) ...
开发操作系统(1)
今天准备开始学习开发操作系统了。
就叫它 XIAOJIOS 吧~
学习开发操作系统的原因呢,第一点还是因为咱们国家的一个情况,我还是希望掌握开发 OS 的一个技术的,第二点是因为很多操作系统的机制希望去学习一下,并且尝试自己编写一份。
这里参照一本书《30天自制操作系统》,主要也是跟着它学习的。
环境准备今天主要用到两个工具:
NASM——基于英特尔 x86 架构的汇编与反汇编工具
qemu——开源免费的虚拟机程序
nas汇编文件的编译方式为:
1nasm xxx.nas -o xxx.img
qemu启动加载 img 文件的方式为:
1qemu-system-x86_64 -drive file=os.img,if=floppy
编写nas汇编文件这里就用它给的吧,毕竟这个格式要说是自己写的我自己都不信。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647; hello.nas; TAB=4; 标准FAT12格式软盘专用的代码 Stand FAT12 f ...
Golang入门学习(15)
Go的第15课——锁、channel遍历、select 语句
sync.Mutex基本这个协程可以理解为多线程里面的线程。线程在操作临界资源的时候会产生竞争,锁可以避免发生竞争。
使用以下语法定义一个锁变量
1var lock sync.Mutex
lock.Lock() 可以为一个锁进行上锁操作,若锁已被其它协程上锁,则阻塞当前协程直到锁被释放。
lock.Unlock() 可以释放一个锁。
实例看下面这个例子
123456789101112131415161718192021222324252627282930313233343536373839package mainimport ( "fmt" "sync")var wg sync.WaitGroupvar lock sync.Mutexvar k intvar locktest bool = false//change herefunc add() { defer wg.Done() if locktest { lock.L ...