Articles
-
Linux 网络模型
by oxnz
全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下:
socket-->bind-->listen-->[accept-->read-->write-->close]-->close
[]中代码循环运行,[]外的是对监听socket的处理,[]内的是对accept返回的客户socket的处理。这些系统调用的参数以及需要的头文件等,只需要在linux下man就好。
-
Linux Assemble Language
by oxnz
Table of Contents
-
/usr/bin/install
by oxnz
Introduction
install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。
Syntax
install [OPTION]... [-T] SOURCE DEST install [OPTION]... SOURCE... DIRECTORY install [OPTION]... -t DIRECTORY SOURCE... install [OPTION]... -d DIRECTORY...
在前两种格式中,会将复制至或将多个文件复制至已存在的,同时设定
权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。
-
C\C++ string
by oxnz
using namespace std; string num[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; string suf[] = {"shi", "bai", "qian", "wan", "yi"}; vector<string> v; string n2s(const string& n) { int l = n.length(); if (l == 1) { return num[n[0]-'0']; } else if (n[0] == '0' && n[1] == '0') { return num[n[0]-'0'] + n2s(n.substr(2, l-2)); } else { return num[n[0]-'0'] + (n[0] == '0' ? "" : suf[l-2]) + n2s(n.substr(1, l-1)); } } string ln2s(const string& n) { int l = n.length(); if (l < 5) { return n2s(n); } else if (l < 9) { return n2s(n.substr(0, l-4)) + "wan" + n2s(n.substr(l-4, 4)); } else { return n2s(n.substr(0, l-8)) + "yi" + ln2s(n.substr(l-8, 8)); } } int test() { cout << n2s("1001") << endl; cout << n2s("1010") << endl; cout << n2s("1101") << endl; cout << ln2s("11101") << endl; cout << ln2s("101101") << endl; cout << ln2s("1101") << endl; return 0; }
-
C\C++ sizeof
by oxnz
关于sizeof的一般性的问题比较多见, 需要强调的是,sizeof运算符的计算是发生在编译期的。 以下讨论几点细节和实现方法。
-
Read Lua Source Code
by oxnz
介绍
Lua 应用比较广泛,主要是作为插件解释器。例如mysql proxy,VLC 等。Lua 源代码比较规范,代码也不长,2w 多行,分布也是比较均匀的,就想看一看,顺便在这里做个笔记。
-
POSIX Threads
by oxnz
Introduction
This article describes some aspects of using pthreads.
POSIX (可移植操作系统接口) 线程是提高代码响应和性能的有力手段。
线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。
-
The Architecture of Open Source Applications
by oxnz
介绍
最近在看 The Architecture of Open Source Applications,顺便翻译了一些我比较有兴趣的文章。以下是目录1,不定期更新:
声明
说明
- 其中橘红色表示只翻译了一部分,等待进一步翻译和校对。绿色表示已经校对。未做标记的是已经翻译完成,但是没有校对。
-
LLVM
by oxnz
英文作者:Chris Lattner
原文链接:LLVM
这一章讨论一些有关构成 LLVM1 的设计决策,是一个 umbrella 项目承载和开发了一套联系紧密低级工具链组件(例如, 汇编器、编译器、调试器等等),被设计来与 Unix 系统上的存在的工具保持兼容。名称 "LLVM" 曾今是一个首字母缩写,但是现在只是 umbrella 项目的商标(brand)。同时 LLVM 也提供一些独有的能力,也因为一些伟大的工具(例如 Clang2 编译器,是一个相比 GCC 有很多优点的 C/C++/Objective-C 编译器),使得 LLVM 同其他编译器区别开来的主要是它的内部架构。
从2000年十二月开始,LLVM 被设计作为一套具有良好定义接口的可重用库[LA04]。在那个时候,开源编程语言的实现被设计作为特殊目的的工具,通常具有单个可执行文件。例如,从一个静态编译器(例如 GCC)重用解析器(parser)来做静态分析和重构是非常困难的。同时脚本语言经常提供一种把它们的运行时和解释器(runtime and interpreter)嵌入到更大的应用程序之中的方法,这个运行时就是一个单独的代码块被包含或者排除。没有方法可以做到跨语言实现的重用和共享。
-
The Bourne-Again Shell
by oxnz
英文作者:Chet Ramey
3.1. 介绍
一个 Unix shell 提供了一个用户通过运行命令来和系统交互的接口。但是一个 shell 也是一门相当丰富的编程语言:具有流程控制、修改、循环、条件、基本的数学操作,命名函数、字符串变量和 shell 与它运行的命令之间的双向通信。
shells 可以交互使用,从终端或者终端模拟器例如xterm,也可以非交互使用,从文件中读取命令。大多数现代shells, 包括 bash, 提供命令行编辑 command-line editing, 使得命令行输入的时候可以使用类似 emacs 或者 vi 的命令进行编译,具有不同的命令历史记录。
bash 处理更像一个shell管道:在从终端或者脚本中读取之后,数据被传送经过一系列阶段,在每一个阶段中进行变换,直到shell最终执行一个命令并手机它的返回状态。