
linux-系统调用
奔跑的企鹅_liuqt
主业相声,副业码农。非主流诗人、文学家,业余音乐家、书法家,伪架构师。人生目标:站在轮子的肩膀上多造几个轮子。
展开
-
被遗忘的桃源——flock 文件锁
缘起文件锁 flock共享锁与排他锁阻塞与非阻塞flock 实现细节调用dup forkexecve 时的文件锁使用 dup 复制文件描述符通过 fork 产生子进程子进程重复加锁execve 函数族中的文件锁文件锁的解除用 LOCK_UN 解锁关闭文件时自动解解锁常规使用示例flock 命令结语缘起在后台开发中,随着多线程应用日益增多,人们对多进程的关注也在逐渐减弱原创 2017-01-18 23:00:26 · 5506 阅读 · 3 评论 -
删除正在使用的文件——釜底抽薪?
彩袖殷勤捧玉钟。当年拚却醉颜红。舞低杨柳楼心月,歌尽桃花扇底风。 从别后,忆相逢。几回魂梦与君同。今宵剩把银釭照,犹恐相逢是梦中。缘起预备知识删除正在被读写的文件删除正在运行的可执行文件删除正在使用的动态链接库结语缘起在linux 系统中上线时经常会遇到需要替换原有可执行程序的操作,我通常的做法是:删除原有可执行文件。例如:rm a.out以相同的文件名把新的可执行文件放到原文原创 2017-03-09 00:36:39 · 4797 阅读 · 5 评论 -
文件操作命令 cp、mv、rm 底层原理
文件操作命令 cp、mv、rm 底层原理文件操作命令 cpmvrm 底层原理缘起inode 结构硬链接符号链接unlink 命令rm 命令rename 命令mv 命令cp 命令结语缘起在linux 系统中上线时经常会遇到需要替换原有可执行程序的操作,我通常的做法是:删除原有可执行文件。例如:rm a.out以相同的文件名把新的可执行文件放到原文件的位置:mv b.out原创 2017-03-06 22:45:41 · 15155 阅读 · 3 评论 -
x86-64 下函数调用及栈帧原理
一蓑一笠一扁舟,一丈丝纶一寸钩。 一曲高歌一樽酒,一人独钓一江秋。 ——题秋江独钓图缘起在 C/C++ 程序中,函数调用是十分常见的操作。那么,这一操作的底层原理是怎样的?编译器帮我们做了哪些操作?CPU 中各寄存器及内存堆栈在函数调用时是如何被使用的?栈帧的创建和恢复是如何完成的?针对上述问题,本本文进行了探索和研究。通用寄存器使用惯例函数调用时,在硬件层面我们原创 2017-06-10 19:06:32 · 12853 阅读 · 6 评论 -
libco协程库上下文切换原理详解
念桥边红药,年年知为谁生 —— 杨州慢 姜夔缘起libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦腰斩断”,这种在函数任原创 2017-06-15 14:31:36 · 11674 阅读 · 2 评论 -
Linux 多线程 ”一写多读” 模式下的无锁设计
缘起双buffer “无锁” 设计指针的切换ptr 竞争条件的解决指针访问丢失延伸结语缘起在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题,即会出现竞争条件。为了解决多个线程对同一变量访问时的竞争条件问题,操作系统层面提供了锁、信号量、条件变量等几种线程同步机制。如果对变量的每次访问都使用上述机制,由于系统调用会陷入内核空间,需要频繁...原创 2017-02-13 22:15:25 · 10182 阅读 · 2 评论