当前课程知识点:基于Linux的C++ >  第十二讲 Linux系统编程基础 >  12.5 程序执行环境(四) >  LinuxCPP1205

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP1205在线视频

LinuxCPP1205

下一节:LinuxCPP1206

返回《基于Linux的C++》慕课在线视频列表

LinuxCPP1205课程教案、知识点、字幕

接下来一个概念就是系统日志

日志是什么东西呢

日志就是系统和程序运行的记录

Linux 操作系统呢有一个系统日志的进程

叫 syslogd 现在叫 rsyslogd 做了升级

这两个进程都是守护进程 都是 daemon

什么叫守护进程呢

所谓守护进程 它就是在后台运行的进程

它是没有控制终端的

也不接受用户的输入

它的父进程通常都是 init 进程

就是 0 号进程

日志文件 它实际上是一个设备

一般对应于 “/dev/log” 这个文件

日志文件的名字一般是 “/dev/log”

但实质上是一个设备

日志信息一般不保存在这个文件里

事实上是保存在 “/var/log” 这个下面

目录下边你可以设定

日志文件的名字叫什么

rsyslogd 既能够接收用户进程输出的日志

也能接收内核的日志

它都可以接收的

在接收到特定的日志信息之后

rsyslogd 这个进程会把这个接收到的信息

输出到特定的日志文件中去

这个日志信息本身的分发

用户是可以配置的

你可以选 有好几个日志处理的函数

比如讲日志生成函数 syslog()

这个函数呢 可变的参数列表

第一个参数是 priority

表示日志的级别

写日志的时候 它的日志的优先级

往往是一个特定的设施值

与它的日志级别的位或

它是个日志优先级嘛

有一个设施值

还有一个日志级别

这个日志级别实际上有 8 个级别

从 0 级一直到 7 级

数字越大 它的级别实际上就是越低

0 级是最重要的

对吧 就是这个意思

总共 8 个日志级别

设施值呢 它有一些预设的选项

有一些预设的参数

这些预设的参数

一般我们用的就是 LOG_USER

用它和我们的日志级别去位或的

去或的结果其实就能够得到

它对应的日志级别

日志的优先级就决定什么级别的优先级

日志我们会记录什么级别的日志

我们就不记录了 就这个意思

syslog() 做的就是这个事

第一个 priority 用来表达它的日志优先级

message 就是它的日志的信息的构造

它是一个结构化的输出

就像 printf() 一样

这个日志的函数

它的头文件是在 “syslog.h” 里

还有打开一个日志的操作用的 openlog()

它有三个参数 一个是 ident

一个是logopt 一个是 facility

openlog() 这个函数用来改变 syslog() 函数的默认的输出方式

openlog() 这个函数用来改变 syslog() 函数的默认的输出方式

让你能够进一步地结构化你的日志的信息

让你能够进一步地结构化你的日志的信息

比如讲 ident 用来表达标志项

你可以指定一个标志串

你比如说在生成这个日志的时候

它前面会输出日期和时间

然后你可以在后边封装一条附加的字符串信息

然后你可以在后边封装一条附加的字符串信息

比如说这是谁谁谁、某某某

在什么什么时候

什么什么地方的

诸如此类的附加信息

你可以用它

用 ident 这个参数传进去

把这个信息也给它输出了

就这个意思

logopt 它是一个特定的日志选项

用来配置我们的 syslog() 函数的行为的

它有一些就像 LOG_PID、像 LOG_CONT、

像 LOG_ODELAY 等等

可以按照这个方式对它进行配置

facility 就是它的设施值

你可以修改 syslog() 这个函数的默认设施值

一般情况下面我们都不改

就用 LOG_USER

还有一个函数叫 setlogmask()

用于对日志进行一些特定的过滤

你传一个 maskpri

就是设定它的优先级的掩码

大于这个值的所有的日志

它实际上就全部就过滤掉了

它就不管了 日志想关闭

就调用 closelog() 这个函数

在 Linux 操作系统中

每一个进程都有两个用户 ID

一个叫 UID 一个叫 EUID

UID 就是用户 ID

EUID 就是有效用户 ID

那么 UID 对应的其实就是真实用户 ID

提供一个有效用户 ID 的目的是什么呢

就是为了方便资源的访问

运行程序的用户

拥有该程序有效用户的权限

这是非常重要的一个地方

和用户的性质是类似的

所以有一个组 ID

还有一个有效组 ID

关于用户信息处理的话

它都有对应的 Get/Set 函数

有存取函数

比如讲获取真实用户 ID

获取有效用户 ID 获取真实组 ID

获取有效组 ID

像 getuid()、geteuid()、getgid()、getegid()

诸如此类

还有设置 有 Get 也有 Set

都是成对的

所以真实用户 ID 有 Get/Set

有效用户 ID 有 Get/Set

组也一样 这么八个函数

这些函数用起来都很简单

所以我们只使用一个简单的例子

调用 getuid()、geteuid()

获得用户 ID 和有效用户 ID

然后把这个信息输出

这个就是我们整个程序运行的结果

我们编译这个 “main.c” 之后

我们去运行

你就能够看到它的用户 ID 和有效用户 ID

初始时候都是我的

这样的话 用户 ID 和有效用户 ID 都是 1000

然后我们会 sudo chown

改变它 把它设成 root

变成根用户的

我又改了 chmod

UID 我没改变

然后 EUID 有效用户 ID 就变成 0

就是它就可以像 root 一样用了

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP1205笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。