- 博客(36)
- 问答 (1)
- 收藏
- 关注
原创 【无标题】
在unix的文件I/O API上建立了很多的IPC API模型,这些API 定义了open()、read()、wirte()、close()、ioctl()、lseek() 和select()等函数。然而,由于在语法和语义上,文件I/O和网络I/O之间存在很多差别,因此网络API提供的标准UNIX文件I/O API不能直接支持额外功能。比如,在unix系统中用来标识文件的路径名,在不同种类的分布式环境下的多个主机上并不是全局唯一的。
2023-08-28 21:57:09
128
原创 Windows 进程之四 CreateProcess函数
Windows 进程之四 CreateProcess函数一、CreateProcess 函数1.1、pszImageName 和pszCmdLine 参数一、CreateProcess 函数这几天被微软的sfc.exe 这个工具整蒙了,用匿名管道和进程来重定向sfc.exe 没有任何输出,最后实在老同学的帮助下解决了这个问题。本篇只是对《Windows核心编程》的学习,加深印象。本篇共有7个小节,从CreateProcess定义开始:BOOL CreateProcess( LPCWSTR psz
2021-03-31 01:32:17
4292
原创 一次奇怪的git之旅
我在github上 NEW 了一个代码仓,想着传一些文件到这个仓库中,在本地执行下面命令发现如下错误:root@SSS:/mnt/c/Users/libeioCPlus# git clone git@github.com:Huoke/libeio.git .Cloning into '.'...git@github.com: Permission denied (publickey).fa...
2019-04-25 11:58:59
222
转载 GNU C 对标准C语言的扩展(转载 懵懵懂懂)
GNU C 对标准C语言的扩展为了方便使用,GNU C在标准C语言的基础上进行了部分方便开发的扩展。这里讲解一些开发中可能会用到的,或者使用频率比较高的内容。1 零长度数组和变量长度数组GNU C 允许使用零长度数组:char data[0];GNU C 允许使用一个变量定义数组的长度:int n = 0;scanf("%d",&n);int array[n];2 c...
2019-04-13 00:32:02
2406
原创 供编译器进行分支预测,是的编译器对代码进行优化,减少指令跳转代
GCC提供内建函数之 __builtin_expect分支预测,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N 的概率很大。一般的使用方法是将 __builtin_expec...
2019-04-05 00:57:41
1108
原创 Linux下 prctl 进程控制
Linux 下 prctl 进程控制Linux下可通过 prctl进行进程各种控制 #include <sys/prctl.h> int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long a...
2019-04-04 18:48:18
3446
原创 信号章——函数 abort (未完善)
函数 abort、exit、_exit、_Exit 区别abort 函数abort 函数的功能是使程序异常终止。#include <stdlib.h>void abort(void);// 此函数不返回值。abort 函数将发送 SIGABRT 信号给调用进程, 前提是进程没有忽略此信号,而且 POSIX.1说明 abort 并不在意进程对这个信号阻塞还是忽略。ISO C...
2019-04-04 01:16:01
694
翻译 使用“#define _GNU_SOURCE” 是什么意思?
使用“#define _GNU_SOURCE” 是什么意思?今天我必须要使用 basename 函数,使用man手册查询了一下这个函数 man 3 basename 发现一个奇怪的信息名称basename,dirname-分析路径名组件简介#include <libgen.h>char *dirname(char *path);char *basename(char *p...
2019-04-01 23:44:07
10181
原创 Unix 标准及实现
Unix 标准及实现1.1 前言人们在 Unix 编程环境和 C 程序设计语言的标准化方面已经做了很多努力工作。在20世纪80年代 Unix 版本种类快速增加,随之而来的是它们之间的差别扩大,为了使不同种类的 Unix 系统之间应有程序可以顺利移植,人们开始呼吁进行Unix标准化。1.2 Unix1.2.1 ISO CISO 是国际标准化组织,它下属许多行业,IEC 是旗下国际电子标准...
2019-03-30 00:10:55
357
原创 线程 一
怎么在单个进程中执行多个任务。一个进程中的所有线程都可以访问该进程的组成部件,例如文件描述符和内存。不管在什么情况下,只要单个资源需要在多个用户间共享,就必须处理一致性问题。我们将在之后的笔记中目前可用的同步机制,防止多个线程在共享资源时出现不一致问题。线程的概念典型的unix进程可以看成只有一个控制线程,即一个进程在某一时刻只能做一件事情。有了多个控制线程以后,在程序设计时就可以把进程设计...
2019-03-03 19:50:01
185
原创 进程环境 三
共享库 即.os库共享库可以使我们的可执行程序文件不需要包含公用的库函数,而只需要在所有进程都可引用的存储区中保存这个库的一个实例副本即可。程序第一次调用库函数时,使用动态链接的方法将程序与共享库函数相连接。这减少了可执行程序的长度,但是增加了运行时间开销。这就是用时间换空间的方法。这种时间开销发生在该程序第一次被调用时。共享库的另一个优点是可以用库函数的新版本替代老版本而无需对使用该库的...
2019-03-02 12:48:02
143
原创 进程环境 二
C程序的存储空间布局c程序由如下几个部分组成:正文段:这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其自身的指令。初始化数据段:(所有带有初始值的全局变量)通常将此段称为数据段,它包含了程序中需明确地赋初值的变量。例如,C程序中出现在任何函...
2019-03-02 00:36:47
395
原创 进程环境 一
main函数我们先分析一下当一个C程序开始执行时,main函数是如何被调用的。C程序总是从main函数开始执行,java、C++、C#等这些类C语言的程序也是。(这里是我的猜测,以后需要求证)main函数的原型:int main (int argc, char* argv[]);其中,argc是命令行参数的数目,argv是指向命令行参数的指针所组成的数组。当内核执行C程序时(其实使用一个...
2019-03-01 19:31:19
259
原创 文件I/O
文件I/O之函数lseek每个打开的文件都有一个与其关联的“当前文件偏移量”,它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加读写的字节数。按系统默认的情况,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量被设置为0。可以调用lseek显式地为一个打开文件设置偏移量。#include&amp;lt;unistd.h&amp;gt...
2019-01-06 18:17:17
288
2
原创 命令行标志库Gflags
介绍,并与其他命令行标志库进行比较命令行参数是用户运行可执行文件时在命令行上指定的标志。在命令行中fgrep -l -f /var/tmp/foo johannes brahms -l和-f就是命令行参数,通常用户传入给应用程序的参数,或者接收到的参数,在这个例子中,-l没有接收参数,-f接收了一个字符串参数。用户可以用库来解析命令行,并且把参数保存到数据结构中。Gflags是google内...
2018-11-05 22:18:06
548
原创 在头文件中 ,inline 函数的定义前加static的目的是什么?
先看一下头文件中定义的一段static 的inline 代码static inline long get_micros(){ struct timeval tv; gettimeofday(&amp;amp;tv, NULL); return static_cast&amp;lt;long&amp;gt;(tv.tv_sec) * 1000000 + tv.tv_usec;}为什么要在头...
2018-10-22 02:33:34
4421
原创 std::function的使用
std::function的使用我们知道在C++,可调用的实体主要包括 函数、函数指针、可以隐式转换为函数指针的对象、或者实现了 operator()的对象(即C++98中的functor)。在C++0x中,新增加了一个 std::function 对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。template <...
2018-10-21 14:03:44
1264
转载 深入浅出UML类图
深入浅出UML类图 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3版)》)中有这么一段:“If someone were to...
2018-04-18 03:04:30
166
转载 Linux VFS
Linux 有着极其丰富的文件系统,大体上可分如下几类:网络文件系统,如 nfs、cifs 等;磁盘文件系统,如 ext4、ext3 等;特殊文件系统,如 proc、sysfs、ramfs、tmpfs 等。实现以上这些文件系统并在 Linux 下共存的基础就是 Linux VFS(Virtual File System 又称 Virtual Filesystem Switch),即虚拟文件系统。V...
2018-04-18 03:01:27
1512
转载 linux 中软链接和硬链接
现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理,Linux 还引入了目录(...
2018-04-18 03:00:06
529
转载 iptables 看门狗
近来业内很多服务器因redis造成服务器被黑,这个攻击的防范重点在于防火墙!! 有时为了方便我们可能会将iptables临时关闭,方便完倘若忘记把它打开,黑客大摇大摆就走进来。 这时候,我们需要条看门狗来帮我们:如果门开了而且家里还没人在家,看门狗自己帮主人把门关上:#!/bin/sh/sbin/service iptables status >/dev/null 2>&...
2018-02-23 22:51:41
172
翻译 多个库的链接
C++标准允许每个编译器设计人员以他认为合适的方式实现名称修饰, 因此由不同编译器创建的二进制模块(对象代码文件)很可能无法正确地链接。也就是说两个编译器将为同一个函数生成不同的修饰名称。名称的不同将使编译器无法将一个编译器生成的函数调用同另一个编译器生成的函数定义匹配。在链接编译器模块时,请确保所有对象文件或库都是由同一个编译器生成的。如果有源代码,通常可以用自己的编译器重新...
2018-02-21 10:23:59
376
转载 转载杨玉庆内联函数
1. 内联函数在C++中我们通常定义以下函数来求两个整数的最大值:复制代码 代码如下:int max(int a, int b){ return a > b ? a : b;}为这么一个小的操作定义一个函数的好处有:① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多② 如果需要做任何修改,修改函数要比找出并修改每一处等价表...
2018-02-20 23:08:08
190
原创 C++定义类时,为什么不能在类中声明自身类型的成员变量?
类声明: class dog; //类的声明类定义: class dog{ //类的定义}; 当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间 。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。 那么我们来看如下代码:class dog{ dog tt; //error, ‘tt’ uses undefi
2017-10-25 22:56:22
2654
空空如也
不知道CPU使用率变高和IO等待时间变长有关系吗?
2019-04-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人