![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
系统编程
文章平均质量分 77
duhengqi
这个作者很懒,什么都没留下…
展开
-
errno列表
perrno,strerror 是错误信息打印函数函数strerror返回一个错误消息字符串的指针,其内容是由实现定义的,字符串不能修改,但可以在后续调用strerror函数时覆盖。函数perror在标准错误输出流中打印下面的序列:参数字符串s、冒号、空格、包含errno中当前错误码的错误短消息和换行符。在标准C语言中,如果s是NULL指针或NULL字符的指针,则只打印错误短消转载 2017-03-08 23:57:44 · 1561 阅读 · 0 评论 -
C++:构造函数和析构函数
在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。构造函数必须是 public 属性的,否则创建对象时无法调用。当然,设置为 private、protected 属性也不会报错,但是没有意义。构造函数没有返回值,因为没有变量来接收返回值,即使有也原创 2017-04-15 22:13:12 · 1182 阅读 · 0 评论 -
TCP/IP四层模型和OSI七层模型的概念
TCP/IP四层模型TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。 TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮转载 2017-03-25 23:52:22 · 260 阅读 · 0 评论 -
条件变量经典实例
/*这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未原创 2017-03-25 23:32:08 · 1230 阅读 · 1 评论 -
解决线程间对共享资源的竞争
进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,通过下面这些技术的使用,可以解决 线程之间对资源的竞争: 1 互斥量Mutex 2 信号灯Semaphore(不做介绍) 3 条件变量Conditio原创 2017-03-25 22:36:36 · 2426 阅读 · 0 评论 -
库函数
c库函数是独立于操作平台的FILE *fopen (const char *filename, const char *mode)filename 打开的文件名 mode 打开模式函数原型 typedef stuct{ int cnt; (余下的字符数) char *ptr; (指向下一个操作位置) char *base; (缓冲区地原创 2017-03-09 21:11:49 · 394 阅读 · 0 评论 -
多线程编程实例
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:A:1 2 3 4 1 2....B:2 3 4 1 2 3....C:3 4 1 2 3 4....D:4 1 2 3 4 1....程序:#inclu原创 2017-03-20 00:26:59 · 259 阅读 · 0 评论 -
多线程编程
使用多线程的理由:1,和进程相比,它是一种非常“节俭”的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式2, 线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不原创 2017-03-20 00:18:58 · 230 阅读 · 0 评论 -
系统调用及用户编程接口(API)
系统调用:用户通过操作系统提供的接口(API)获得内核提供的一些服务程序的运行空间逻辑上是分离的,分为内核空间和用户空间。用户进程通常情况下无法访问内核空间。所有的进程会在内核中有一个文件记录表,记录表是有限的。文件描述符是一个非负整数,是一个索引值,指向内核空间每个进程的记录表Linux一点哲学,一切皆为文件(包括输入输出设备);故标准输入STDIN_FILENO原创 2017-03-08 21:41:35 · 3876 阅读 · 0 评论 -
库函数与系统调用的区别
系统调用与库函数的区别Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调转载 2017-03-09 21:07:26 · 303 阅读 · 0 评论 -
程序:进程间通信——有名管道实例
有名管道(命名管道)命名管道和无名管道基本相同,但也有不同点:无名管道只能由父子进程使用;但是通过命名管道,不相关的进程也能交换数据#include #include int mkfifo(const char * pathname, mode_t mode)pathname:FIFO文件名mode:属性(见文件操作章节)原创 2017-03-19 00:24:34 · 560 阅读 · 0 评论 -
程序:进程间通信——无名管道实例
无名管道由pipe()函数创建: int pipe(int filedis[2]); 当一个管道建立时,它会创建两个文件描述符:filedis[0] 用于读管道, filedis[1] 用于写管道(不固定,也可倒过来)通常先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程所创建的管道原创 2017-03-19 00:12:54 · 509 阅读 · 0 评论 -
进程控制编程
进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元程序是放到磁盘的可执行文件,进程是程序执行的实例进程和程序的区别:进程是动态的,程序是静态的 进程是暂时的,程序是长久的 进程与程序的组成不同原创 2017-03-18 23:53:20 · 512 阅读 · 0 评论 -
库函数
c库函数是独立于操作平台的FILE *fopen (const char *filename, const char *mode)filename 打开的文件名 mode 打开模式函数原型 typedef stuct{ int cnt; (余下的字符数) char *ptr; (指向下一个操作位置) char *base; (缓冲区地原创 2017-03-09 00:19:06 · 280 阅读 · 0 评论 -
常见内存错误
转载时请注明出处:http://blog.csdn.net/absurd随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使是久经沙场的老手,也转载 2017-08-05 10:21:32 · 398 阅读 · 0 评论