TLPI-Chapter 4文件IO

所有执行I/O操作的系统调用都以文件描述符(一个非负整数)来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道、FIFO、socket、终端、设备、普通文件。它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。每个进程,文件描述符都自成一套。

三种标准的文件描述符:

0 标准输入 1 标准输出 2 标准错误

然后介绍执行文件IO操作的4个主要系统调用:

fd = open(pathname,flags,mode) 打开或创建一个新文件.

numread = read(f......

GCC编译链接多文件

gcc是Linux/Unix上非常强大的C语言编译器。并且如今也支持C++的编译。与VC不同,gcc是完全跨平台的。到目前为止很多工具都使用gcc作为其编译环境,比如cocos2d-x,android的NDK等等。 学习使用gcc编译器,就是学习它众多的编译参数。就是用连字符-连接的参数.

因为它的参数并不全是单字符的,所以不能使用一个连字符后加多个参数的写法, 要每个参数前面都要加一个连字符.

常用用法

直接在gcc后面加上要编译的C语言源文件

gcc hello.c

这种默认的情况下会生成一个名为a.out的可执行文件。

-o 最常用的编译选项,用于指定要生成的可执行文件......

TLPI-源代码运行

上周末开始看《UNIX/Linux系统编程手册》这本书,周末的时间看到第四章,觉得这本书比直接看Linux内核要好接受的多,因为从代码入手,可以更好的理解,比如第三章系统调用的讲解,如果只是理论方面可能比较枯燥,那么这本书中的代码,如何运行呢?

下载代码

这本书的主页.代码版本有两个:

Distribution version: a tarball of the source code that includes extra material not shown in the book. Probably, this is the version of the code that ......

TLPI-Chapter 3系统编程概念

第三章内容概念讲的其实相对好理解,主要有如下几点:

系统调用是可控的内核入口,进程可以请求内核以自己的名义去执行某些动作,这就用到了系统调用,讲处理器从用户态切换到内核态。

在书中作者用到一个例子X86-32为例,按事件发生顺序:

1.应用程序通过外壳(wapper)函数,发起系统调用

2.参数入栈,传入外壳函数。

3.外壳函数将参数置入特定寄存器(包括系统调用编号)

4执行中断机器指令(int 0x80)。

5.内核响应中断指令,调用system_call()里程处理中断。

如何处理中断呢?

在内核栈保存寄存器的值

审核系统调用编号的有效性

通过编号找到相应的系统调用......

Q02翻牌

100张写着数字1-100的牌,并按顺序排列着,最开始所有卡牌都是背面朝上放置,然后从第二张开始翻牌,隔一张继续翻牌到最后一张,然后从第三张开始翻牌,隔两张开始翻牌(如果本来正面朝上,则翻成背面朝上,如果本来背面朝上,则翻成正面朝上),依次类推直到没有可翻动的牌。

/*

Name: 程序员算法趣题Q03

Copyright: 52coder.net

Author: 52coder

Date: 04/09/17 22:44

Description: Q03

*/

#include <stdio.h>

#include <stdlib.h>

int main()

{

......

Q01回文十进制数

本文是程序员算法趣题一书Q01 C语言实现,由于该书中所给的代码是Javascripts与Ruby,故在今后的阅读中会记录部分习题的C语言实现。

Q01

求用十进制、二进制、八进制表示都是回文数的所有数字中,大于十进制数10的最小值。

/*

Name: 程序员算法趣题Q01

Copyright: 52coder.net

Author: 52coder

Date: 03/09/17 23:44

Description: Q01

*/

#include <stdio.h>

#include <stdlib.h>

/*判断十进制数是否是回文数*/

int vaild......

生活

在地铁上看到旁边的一个人在津津有味的看一段关于生活的描述:

生活是什么?

生活对我而言是活着,是存在,是每一口呼吸,每一顿饭,每一个晚安。

生活是医院里给家人打电话,慌慌张张擦泪的外地人。

生活是雨天里踩着共享单车没打伞,全身湿透只为一个全勤的年轻人。

生活是明白一段感情,很多事,徒劳无功,但还是要奋力一试。

如果你觉得他们在假装,那我想,你真的对生活有什么误解。

当我看到邻座的大姐看的kindle上这段话时,我鼓起勇气冒着搭讪的风险问能不能拍个照,就这样在大姐的满脸疑惑中我举起了我心爱的iphone6s手机拍下这段当时在我看来感动的一塌糊涂的文字。

那么生活到底是什么呢......

Sublime Text 3 for Mac 使用心得

本文是使用和学习Sublime Text 3 for Mac过程中的体会与心得,欢迎补充。

安装Package Control

安装过程: 使用快捷键 control + ` 或者菜单栏选择View > Show Console

安装Package Control参考官方页面.

Sublime Text3在控制台输入

import urllib.request,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf......

C语言main函数argc argv介绍

在刚开始学习C语言时,你一定对main函数的形式有点迷惑,我第一次看到这种形式是在国外那本被誉为C语言圣经的《C语言程序设计》。

原形如下:

#include <stdio.h>

int main(int argc, char ** argv)

{

return 0;

}

如果你最开始是在VC6.0这种带有界面GUI的编译器中写代码的话,可能理解起来稍有难度,当然你在VC6.0编译之后会生成一个exe文件,在命令行执行的话可以看到argc和argv的作用.

这两个参数的作用: argc 是指命令行输入参数的个数(以空白符分隔) ,argv存储了所有的命令行参数 .

......

snprintf函数

snprintf

int snprintf ( char * s, size_t n, const char * format, ... );

Write formatted output to sized buffer

Composes a string with the same text that would be printed if format was used on printf, but instead of being printed, the content is stored as a C string in the buffer pointed by s (takin......