10 Leon_Geo

尚未进行身份认证

奋斗在嵌入式开发行业的年轻人

等级
TA的排名 28w+

VmWare虚拟机设置ubuntu和windows之间的共享文件夹

一般在进行编程作业的时候,我们会采用“开发在Windows中编辑源代码,在linux中编译、执行源代码。这往往需要需要将在Windows下编辑好的源代码上传到linux系统种进行编译。怎么来进行上传呢?其实通过VMWare的共享文件夹就可以轻松实现:1先在Windows中创建一个文件夹,注意要使用英文名称,例如"shared_folders"。2然后在VMWare中,依次点击菜单栏 VM...

2020-05-21 22:40:44

标准测试宏选项

系统调用和库函数的标准有多种多样(UNIX 、POSIX、BSD、V等),为了使我们编写的程序具有高度的兼容性,在编译时需要指定或弄清楚程序所在运行环境的类型。在编程时,在引进头文件之前利用#ifdef语句来判断程序运行环境并分别引用不同的头文件。然后在命令行编译时,提供指定选项来设置本次编译的环境。$ cc -D_BSD_SOURCE prog.c编译选项-D后接指定的环...

2020-04-16 14:28:38

系统函数和C库函数调用的几种错误处理方法

几乎所有的系统函数和库函数在执行时都会通过返回特定的值来说明成功或出错。我们在调用它们后,必须马上对其返回值进行检测,如果调用出错则要进行相应的处理(一般是向终端输出错误信息并终止程序运行)。否则在今后程序出错时,如果通过调试去定位到该错误将会花费很长的时间。当然也有某些系统调用从不失败(例如getpid()或_exit()等),在调用它们时可以不进行错误检测。1.如何发现系统调用出错...

2020-04-16 14:23:46

比atoi()函数更健壮的一类包装函数

今天介绍两个函数用以代替库函数atoi()、atol()和strtol()函数,原因是它能提供比库函数更好的错误检查机制。int getInt(const char *arg, int flags, const char *name);long getLong(const char *arg, int flags, const char *name);arg指向待转的数字字符串,flag...

2020-04-16 14:18:56

系统函数和C库函数调用的几种错误处理方法

几乎所有的系统函数和库函数在执行时都会通过返回特定的值来说明成功或出错。我们在调用它们后,必须马上对其返回值进行检测,如果调用出错则要进行相应的处理(一般是向终端输出错误信息并终止程序运行)。否则在今后程序出错时,如果通过调试去定位到该错误将会花费很长的时间。当然也有某些系统调用从不失败(例如getpid()或_exit()等),在调用它们时可以不进行错误检测。1.如何发现系统调用出错...

2020-04-11 23:31:55

经典生产者-消费者问题解析

1.生产者-消费者问题生产者和消费者问题在现实系统中是很普遍的。例如在一个多媒体系统中,生产者编码视频帧,而消费者消费(解码)视频帧,缓冲区的目的就是减少视频流的抖动。又如在图形用户接口设计中,生产者检测到鼠标和键盘事件,并将其插入到缓冲区中。消费者以某种基于优先级的方式从缓冲区中取出这些事件并显示在屏幕上。生产者和消费者模式共享一个有n个槽位的有限缓冲区。生产者反复地生成新的item,并将它...

2020-04-09 14:35:33

linux下的并发编程详解

使用应用级并发的应用程序称为并发程序(concurrent program)。现代操作系统提供3种基本的构造并发程序的方法:进程、I/O多路复用和线程。下面将分别予以讨论。1. 基于进程的并发编程我们可以利用熟悉的fork、execve及waitpid函数来开发基于进程的并发编程。下面以构造并发服务器为例,在服务器程序中,父进程接受客户端的连接请求,然后创建一个新的子进程为每一...

2020-04-06 00:00:19

一文学会GDB操作命令

GDB快速指南版本 2 (2009 6月 14)原文这是一个非常快速的GDB指南,旨在让你开始在终端的命令行下熟练使用GNU调试器gdb。更多详细信息,查看官方GDB 文档!此外,一个好的GNU GDB前端是数据显示调试器DDD。编译您必须告诉编译器使用包含符号调试的信息来编译代码。下面介绍如何使用gcc,使用**-g**开关:$ gcc -g hello.c -o hello ...

2020-03-27 15:42:42

Linux下的网络编程

1.全球IP因特网1.1数据在互联网上的传输过程1.2 一个网络程序的软硬件组织1.3 IP地址结构一个IP地址就是一个无符号32位整数。网络程序将其存放在如下所示结构体中:struct in_addr{ uint32_t s_addr; //大端法表示的IP地址};因为网络字节序都是大端法表示的,所以Unix提供了一组函数用于在网络和主机间进行字节序的转换:#...

2020-03-26 11:28:31

详解高速缓存存储器的3种映射方式

开始的计算机系统中存储器层次包括CPU寄存器、主存(DRAM)和硬盘,后来为了缓解寄存器与主存间速度的差异,系统设计者在它们之间增加了高速缓存(SRAM),它的访问速度几乎可以和寄存器一样快。随着CPU和主存的性能差距逐渐拉大,后来在原高速缓存(L1高速缓存)和内存之间有增加了L2和L3级高速缓存。一般访问寄存器需要1个时钟周期,访问L1级高速缓存需要4个时钟周期,访问L2级高速缓存需要10个...

2020-03-25 13:42:50

C程序中如何读取目录中的文件并判断文件大小等信息

读取目录内容应用程序可以用readdir系列函数来读取目录内容。#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name); //成功返回目录指针,失败返回NULLstruct dirent *readdir(DIR *dirp); //成功返回目录项指针,已读完或失败返回NU...

2020-03-24 17:37:12

各种I/O函数的选用原则

应用程序可以通过诸如open、close、lseek、read、write和stat这样的函数来访问文件或I/O设备。更高级别的还有标准I/O及RIO( CS:AP网站参考代码 ,为了修补read等系统IO函数的不足而撰写的健壮的包装函数,它们自动处理不足值,为读文本行提供一种高效的带缓冲的方法。)在实际编程中如何选用这些函数呢?下面提供一些基本原则:只要又可能就使用标准I/O。特别是对磁...

2020-03-24 16:24:50

C程序中常见与内存错误有关的坑

间接引用坏指针在进程的虚拟地址空间中有很多区域是还没有映射的,如果试图向这些地址进行写或读,可能会引发保护异常或段错误。一个最典型的例子:假设我们使用scanf函数从键盘输入一个值给变量val。正确的写法是:scanf("%d", &val);然而,我们很多初级开发者容易错写成:scanf("%d", val);此时,编译器将val值错误的解释成一个地址值,并试图向这个地...

2020-03-23 16:34:34

非本地跳转函数setjmp和longjmp

C语言提供了一种用户级的异常控制流形式,称为非本地跳转(nonlocal jump),它可以将控制流直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用和返回序列。而这些都是通过两组函数实现的。setjmp函数首先来看看函数原型:#include <setjmp.h>int setjmp(jmp_buf env); //返回0int sigsetj...

2020-03-22 23:11:01

设置Source Insight默认工作目录

有时候source insight安装好之后,打开source insight软件会出现如下图的错误:图片发自简书App这是由于source insight的默认工程目录含有中文路径,导致打不开软件,此时我们可以通过修改注册表来重新指定默认的工程路径来解决这个问题。具体方法如下:首先,Win+R输入regedit打开注册表,定位注册表项:HKEY_CURRENT...

2020-03-22 11:33:27

Ubuntu 下 /etc/resolv.conf文件总是自动清除问题的解决方案

虚拟机用了几天发现Ubuntu无法上网,打开命令终端,输入命令: ~~~ ping www.baidu.com ~~~ 结果显示名称无法识别,而直接与宿主机之间使用 IP 地址进行互ping,则可以ping得通。这说明是DNS服务出现了问题。 于是,修改/etd/resolv.conf文件,在这句话: ...

2020-03-22 11:30:42

一文教你如何构建自己的函数库

话说ISOC99有自己的一系列标准C函数库,例如我们熟悉的libc.a(包含标准I/O函数、字符串操作函数和整数数学函数)和libm.a(浮点数数学函数),可供我们在使用gcc编译工具编译程序时调用。那么,如果我们在日常学习或项目开发中积累了许多好的函数,希望日后在其他项目中能够复用时,我们又该如何去保存他们呢?今天我就告诉大家怎么办?1. 看gcc编译器都干了些什么?所谓,知...

2020-03-22 11:28:20

Linux中的信号机制

信号就是一条消息,通知进程系统中发生了什么事,每种信号都对应着某种系统事件。一般的底层硬件异常是由内核的异常处理程序处理的,它对用户进程来说是透明的。而信号机制,提供了一种方法通知用户进程发生了这些异常。例如,一个进程试图除0,会引发内核向他发送SIGFPE信号;执行非法指令会引发SIGILL信号;非法内存访问引发SIGSEGV;当你从键盘上键入Ctrl + C会引发SIGINT;当某个子进程结...

2020-03-21 23:38:00

计算机底层中的IEEE浮点数表示

IEEE标准中浮点数用形如V = (-1)s x M x 2E的格式表示一个小数:s☞符号位,s=1代表负数,s=0代表正数。M☞尾数,代表小数点之后的数。E☞阶数,对刚才的小数进行加权,权重是2的E次幂。位表示所以整个浮点数的二进制表示形式由3个部分组成:1位的符号段(s)+ k位的阶码段 + n位的小数字段。说明:在32位单精度表示中,k=8, n=23;在64位双精度表示中,k=...

2020-03-19 19:56:05

FileZilla正确连接虚拟机方法

1.查看ssh服务的状态输入命令:sudo service sshd status如果出现Loaded: error (Reason: No such file or directory)提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。如果出现Active: inactive (dead)说明已经安装了ssh服务,但是没有开启。按照第三步:开启ssh服务。2.安装...

2020-03-19 19:43:26

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 分享小兵
    分享小兵
    成功上传3个资源即可获取