TLPI-Chapter 10 时间

日历时间Calendat Time

UNIX系统内部对时间的表示均是以自1970年1月1日的零点以来的秒数来度量。日历时间存储与类型time_t的变量中,此类型是由SUSv3定义的整数类型。

系统调用gettimeofday(),可于tv指向的缓冲区中返回日历时间。

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

Returns 0 on success, or –1 on error

参数tv是指向如下数据结构的一个指针:

struct timeval {

_......

TLPI-Chapter 9 进程凭证

这一章开始看的有点懵,在网上搜索到一篇文章有助于理解链接地址Set-User-ID

1.每个进程都有一套用数字表示的用户ID和组ID。具体有实际用户ID(real user ID), 实际组ID(real group ID),有效用户ID(effective user ID),有效组ID(effective group ID),保存的set-user-ID和set-group-ID,文件系统用户ID和文件系统组ID,辅助组ID。

将上述种种ID称为进程凭证。

2.实际用户ID和实际组ID:

这两个ID确定了进程所属的用户和组。当用户登录时,会从/etc/passwd文件中读取UID......

C经典面试题

本文将持续更新C经典面试题笔试题,短短的程序,却是大大的有意思。如果你针对文中内容有不同见解,欢迎留言评论.本文将会持续更新,记录有意思的题目。

以下程序的输出为:

#include <stdio.h>

int main()

{

float a=5.2;

if(a==5.2)

printf("equal");

else if(a < 5.2)

printf("less than");

else

printf("Great than");

return 0;

}

首先我们看知乎网友vczh的精彩回复:

......

Linux命令行大全总结(下)

本文是Linux命令行大全这本书第12章之后的阅读笔记部分。

VI简介

数字0 跳转至本行开头

Shift + 4 跳转至本行末尾

Shift + G 跳转至文件最后一行

dd 删除当前行

5dd 删除当前行和之后的4行

dG 删除当前行到文件末尾

d20G 删除从当前行至20行

复制命令

yy 复制当前行

5yy 复制当前行和之后4行

yG 复制当前行到文件末尾

y20G 复制......

Linux命令行大全总结(上)

阅读Linux/UNIX系统编程闲暇之余阅读Linux命令行大全这本书,想起当初毕业同学送给我时的场景,书很新,新到什么程度呢,我说这书时昨天刚买的都没毛病。

本篇博客只记录一些印象不太深刻的内容,相对较简单或对我来说比较熟练的,不再记录.

shell是一个接受由键盘输入的命令,并将其传递给操作系统来执行的程序。bash是Bourne Again Shell的首字母缩写,Bourne Again Shell基于这样一个事实,即bash是sh的增强版本,而sh是最初的UNIX shell程序,由Steve Bourne编写。

结束终端会话

直接关闭终端窗口或是在shell提示符下输入e......

TLPI-Chapter 8 用户和组

课后习题存在错误,在官网勘误表中更正如下:

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <pwd.h>

int

main(int argc, char *argv[])

{

if (argc != 3 || strcmp(argv[1], "--help") == 0) {

fprintf(stderr, "Usage: %s uid1 uid2\n", arg......

strtol函数

本文将介绍strtol函数,参考linux programmer's manual,如有任何疑问请评论指出.

C 库函数 long int strtol(const char nptr, char endptr, int base) 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。

声明

下面是 strtol() 函数的声明。

long int strtol(const char *nptr, char **endptr, int base);

参数

np......

TLPI-Chapter 7 内存分配

第七章将的malloc函数族,进程可以动态分配和释放内存。在讨论这些函数的实现时,描述了程序对已分配内存处理失当的种种情况,还点出了一些有助于定位此类错误根源的调试工具。

在课后练习中针对free_and_sbrk.c的修改如下:在每次malloc后,打印出program break堆顶的当前值。来验证malloc不会每次被调用时都调用sbrk()来调整program break的位置,而是周期性地分配大块内存。

root@ubuntu:~/tlpi-book/memalloc# ./free_and_sbrk 1000 1024 1 1 1000

Initial program br......

TLPI-Chapter 6 进程

每个进程都有一个唯一进程标识号(process ID),并保存有对其父进程号的记录。

进程的虚拟内存逻辑上被划分为许多段:文本段、数据段、栈和堆。

栈由一系列帧组成,随函数调用而增长,随函数返回而减,每个帧都包含有函数局部变量、函数实参以及单个函数调用的调用链接信息。

程序调用时命令行参数通过argc argv参数提供给main()函数。通常argv[0]包含调用程序的名称。

每个进程都会获得其父进程环境列表的一个副本,即一组”名称-值“的键值对。全局变量environ和各种库函数允许进程访问和修改其环境列表中的变量。

setjmp()函数和longjmp()函数提供了从函数甲执行非......

Q06考拉兹猜想

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

Q06考拉兹猜想

对自然数n循环执行如下操作:

n是偶数时,用n除以2

n是奇数时,用n乘以3后加1

如此循环操作,无论初始值是什么数字,最终都会得到1

但是Q06对原来的考拉兹猜想做了改动,参考题目如下: