IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:POSIX

共 3 篇相关文章

IT 累计浏览 179

errno 的实现

POSIX标准对errno的定义从早期的外部变量演变为可修改左值的宏,旨在解决多线程环境下共享全局变量导致的错误码覆盖问题,确保线程安全。FreeBSD的具体实现采用函数指针间接调用模式:errno宏展开后会调用__error()函数获取int指针。在单线程场景下,__error()通过函数指针返回全局变量__libsys_errno的地址。当程序链接线程库libthr时,其构造函数会调用__set_error_selector,将函数指针切换至线程安全版本__error_threaded。该函数会检查线程初始化状态:若当前线程非初始线程,则返回该线程pthread结构体中独立的error字段地址;否则仍回退使用全局存储。这种设计既保证了主线程在线程库初始化前的可用性,又为每个工作线程提供了独立的错误存储。此外,libthr还通过弱符号引用提供了兼容路径,并将一系列可能阻塞的系统调用替换为线程化版本,以处理取消点等线程语义。

IT 累计浏览 3,590

分布式文件系统Ceph调研1

这篇调研聚焦于Ceph分布式文件系统的起源与核心设计理念。Ceph最初由加州大学圣克鲁斯分校的Sage Weil为其博士论文设计,后经全职开发逐步推向生产环境。文章清晰地指出了Ceph的两大核心目标:构建一个基于POSIX标准、且不存在单点故障的分布式存储系统,从而实现数据的容错与无缝复制。 文中特别提到了一个标志性节点:2010年,Linux之父Linus Torvalds正式将Ceph客户端代码合并至Linux内核主分支。这一事件不仅标志着Ceph获得了开源社区的广泛认可,也为其在生产环境中的大规模部署与应用奠定了坚实的系统基础。对于关注分布式存储技术演进的读者而言,这篇梳理了Ceph从学术项目走向产业基石的关键历程。

IT 累计浏览 3,486

linux下获取文件大小

这篇讲的是在Linux环境下获取文件大小时,一个看似简单的标准C库函数使用场景,却可能隐藏着不易察觉的陷阱。作者从实际工作需求出发,起初认为用fseek与ftell组合就能轻松解决,但在实际操作中发现,这种传统方法在处理大文件(如超过2GB)时会遇到问题,导致获取的大小不准确。 问题的根源在于标准库函数fseek和ftell使用long类型,在32位系统中其范围有限。作者随后梳理了更可靠的替代方案,包括使用平台提供的64位函数(如fseeko/ftello)以及stat系统调用等方法。文章通过代码示例,清晰地展示了这些方案在应对不同文件大小和系统环境时的具体实现与差异。 最终,作者强调了在跨平台或涉及大文件处理时,选择正确API的重要性,并提供了可参考的解决思路,帮助读者避免在实际开发中踩坑。