技术与技巧札记

Linux常用命令及技巧:

1cat /proc/version 查看当前内核的版本

  (2)  挂载nfs文件夹:需要先确认在/etcexports文件,可以用于开发板挂载的文件夹

        mount -o nolock 10.0.22.30:/root/sharednfs /mnt

etcexports文件常见参数:

rw 可读写的权限 

ro 只读的权限

no_root_squash   NFS 客户端分享目录使用者的权限,即如果客户端使用的是 root用户,那么对于这个共享的目录而言,该客户端就具有 root的权限

sync 资料同步写入到内存与硬盘当中 

async 资料会先暂存于内存当中,而非直接写入硬盘

  (3) Vi命令行模式:set nu显示行号

                           /搜索字符串

  (4) 强制删除非空的目录:rm -rf ./hello (强制删除本地目录下的hello及其子目录)

5)在当前目录及其子目录中查找字符串:grep -rn "PROC_FS" ./*

./* : 表示路径为当前目录.

-r 是递归查找

-n 是显示行号

       

  (6)建立文件的符号链接:ln -s ../hello.c ./hello1    上层目录中的hello.c在本层目录中建立符号链接hello1

7tar打包压缩;tar解压缩解包

        a. 当前目录下所有文件打包用gzip压缩: tar -czvf hello.tar.gz  ./*

        b. 当前目录下的文件解包gzip解压缩:tar -xzvf hello.tar.gz

        c. 当前目录下所有文件打包用bzip2压缩: tar -cjvf hello.tar.bz2  ./*

        d. 当前目录下的文件解包bzip2解压缩:tar -xjvf hello.tar.bz2

  (8)查看域名对应IP地址:nslookup www.ismartalarm.com

  (9)ifconfig eth0 down    网卡down

     ifconfig eth0 up       网卡up

     ifconfig -a   查看当前机器中所有网络,包括停止工作的网络

     ifconfig eth0 10.0.22.30 netmask 255.255.255.0

10)查看nfs服务是否启用:service nfs status

  (11)查看nfs服务在各个启动level下的启用/禁用情况:chkconfig —list | grep ifs

       修改nfs服务在启动level下的启用:chkconfig —level 3 nfs on

  (12)查看服务的端口号: catetc/service

  (13) VI 移动到行开头:0(数字0

            移动到行尾:$

            移动到文档开头:1(或输入数字到某一行)

            移动到文件尾部:G

            复制行:yy   黏贴:p  删除:dd  撤销:u  删除字符:x

 14gccgdb查看版本:gcc -v

                                      gdb -v

   (15) linux gzip解压包含符号链接文件的gzip压缩包失败:

         Windows共享目录, fat分区等是不支持linux的符号链接必须在ext3/4, btrfs等这些分区格式的目录下解压

 16touch命令创建文件

   (17) arp -a 查看接入路由器的MAC

 18tail命令,从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

   (19) mkdir -p 选项允许你一次性创建多层次的目录,而不是一次只创建单独的目录。如:mkdir -p /var/run

 20printk根据不同优先级的信息可以输出到控制台上、/var/log/messages里。其中,对输出给控制台的信息有一个特定的优先级 console_loglevel。若优先级小于这个整数值时,则消息才能显示到控制台上,否则,消息会显示在/var/log/messages里。若不加任何优先级选项,则消息默认输出到/var/log/messages文件中。

 21proc - process information pseudo-file system

          进程信息虚拟文件系统,此目录中的文件是关于你正在运行的进程详细信息,如PID等信息。

22)显示当前文件夹下所有文件的行数:cat*|wc -l

23)显示当前文件夹下各个文件的行数:ls *|xargs wc -l


24)修改Uboot中的串口波特率:/Ubootinclude/configs/rt2880.h   

          CONFIG_BAUDRATE

          Uboot开机的打印位于:/Ubootlib_mips/board.c


25Vim操作快捷键:dd--剪切光标所在行 ndd 连续剪切多行)

                                yy--复制光标所在行 nyy 连续复制多行)

                                p--黏贴

                                x--删除光标后面的一个字符

                                X--删除光标前面的一个字符

                                u--撤销上一个操作 ctrl+r 可撤销u的修改)

                                .--重复上一个操作

                                v--进入可视模式;选中多行,y--进行复制;p--进行黏贴;d--进行删除

                                G--跳转到最后一行

                                nG--跳转到第n

                               :%s/old/new/g     整个文件中的old替换为new


26!!可以执行上一个指令

27>以覆盖的方式重定向输出(>默认表示1>;还可以将标准错误输出重定向为2>

         >>以累加的方式重定向输出(>>默认表示1>>;还可以将标准错误输出重定向为2>>

         <<<表示标准输入重定向

(28) ubuntu12.04txt文件乱码如何解决?

gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8','GB18030','GB2312','GBK','BIG5','CURRENT','UTF-16’]"

(29)ubuntu terminal配色方案

文字颜色:#708284

背景颜色:#07242E

30)移除所有的.O文件

find  -name “*.o" | xargs rm




volatile关键字:

一般说来,volatile用在如下的几个地方:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile

2、多任务环境下各任务间共享的标志应该加volatile

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;



特殊字符:

~ @ # $ ^ & * ( ) - + = [ ] { } ? | . ‘


 TJk@GJyM:AHAw2INr:e*mfGCPN:q4H+ALMm:jMZ6pTk6:+U[kruWB 



const意味着只读

一个参数既可以是const还可以是volatile吗?解释为什么。

 一个指针可以是volatile吗?解释为什么。

 下面的函数有什么错误:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

下面是答案:

是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)

{

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的值可能被意想不到地该变,因此ab可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

long square(volatile int *ptr)

{

int a;

a = *ptr;

return a * a;

}



static关键字,意味着不要导出到程序外部


static void    /* "static" means don't export the symbol... */

myfunc2()

{

    myfunc3();

}



tar压缩算法:

tar -zcvf /home/xahot.tar.gz /xahot

tar -zcvf 打包后生成的文件名全路径要打包的目录

例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。


几种快速清空文件内容的方法:

  $ : > filename #其中的 :是一个占位符,不产生任何输出.

  $ > filename

  $ echo “” > filename

  $ echo /dev/null > filename

  $ echo > filename

  $ cat /dev/null > filename




mount命令详解

Baby 镜像更新:

1.cp /tftpboot/root_uImage /root/sharednfs

2.telnet 登录板子

3.mount 本地镜像所在路径到/mnt

mount -o nolock,rw 10.0.22.18:/root/sharednfs /mnt

4.cd mnt

   cp  root_uImage /dev/mtdblock4

5.reboot


功能:加载指定的文件系统。 

语法:mount [-afFhnrvVw] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [加载点

用法说明:mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)。可将经常使用的设备写入文件/etc/fastab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。 

常用参数和选项: 

-a 加载文件/etc/fstab中设置的所有设备。 

-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。 

-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。 

-h 显示在线帮助信息。 

-L<标签>加载文件系统标签为<标签>的设备。 

-n 不将加载信息记录在/etc/mtab文件中。 

-o<选项>指定加载文件系统时的选项。有些选项也可在/etc/fstab中使用。这些选项包括: 

async 以非同步的方式执行文件系统的输入输出动作。 

atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime 

auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto 

defaults 使用默认的选项。默认选项为rwsuiddevexecanto nouserasync 

dev 可读文件系统上的字符或块设备,取消选项为nodev 

exec 可执行二进制文件,取消选项为noexec 

noatime 每次存取时不更新inode的存取时间。 

noauto 无法使用-a参数来加载。 

nodev 不读文件系统上的字符或块设备。 

noexec 无法执行二进制文件。 

nosuid 关闭set-user-identifier(设置用户ID)set-group-identifer(设置组ID)设置位。 

nouser 使一位用户无法执行加载操作,默认设置。 

remount 重新加载设备。通常用于改变设备的设置状态。 

ro 以只读模式加载。 

rw 以可读写模式加载。 

suid 启动set-user-identifier(设置用户ID)set-group-identifer(设置组ID)设置位,取消选项为nosuid 

sync 以同步方式执行文件系统的输入输出动作。 

user 可以让一般用户加载设备。 

  

-r 以只读方式加载设备。 

-t<文件系统类型>指定设备的文件系统类型。常用的选项说明有: 

minix Linux最早使用的文件系统。 

ext2 Linux目前的常用文件系统。 

msdos MS-DOS FAT 

vfat Win85/98 VFAT 

nfs 网络文件系统。 

iso9660 CD-ROM光盘的标准文件系统。 

ntfs Windows NT的文件系统。 

hpfs OS/2文件系统。Windows NT 3.51之前版本的文件系统。 

auto 自动检测文件系统。 

-v 执行时显示详细的信息。 

-V 显示版本信息。 

-w 以可读写模式加载设备,默认设置。




mount jffs2 文件系统系统错误解决办法 

分类: Linux2012-09-11 17:37 930人阅读 评论(0) 收藏 举报

flashblog

最近在板上mount jffs2时老是出错,困扰了好像。主要是提示如下错误:

Child dir "upf" (ino #26) of dir ino #3 appears to be a hard link
Child dir "param" (ino #21) of dir ino #3 appears to be a hard link

.........................
Child dir "app" (ino #62) of dir ino #6 appears to be a hard link

一堆的这样问题。搞的头大。

想不出为什么!!

没办法G之。偶然找到一个blog说是flash没有擦除。fuck earse ,tftp下载,果然正常。

该文主要内容如下:

1.判断是不是jffs2文件。用UE打开,在前面应该是0x85,0x19 ,如果不是,则是大小端的问题。请在mkfs.jffs2命令上加入-l或者-b

2.如果出现以下错误,则是文件系统被覆盖了。


3.出现以下错误。是因为flash不够干静。erase

Child dir "upf" (ino #26) of dir ino #3 appears to be a hard link
Child dir "param" (ino #21) of dir ino #3 appears to be a hard link

4.出现以下错误。是Flash空间不够

jffs2_read_dnode() asked for 4096 bytes at 114688 from 3241-byte node
jffs2_read_dnode() asked for 4096 bytes at 118784 from 3241-byte node

顺便带上jffs2的命令格式:

/mkfs.jffs2 -d ./jffs2 -l  -e 0x20000 -o jffs2.img

原文地地址:http://blog.csdn.net/plaris060504/article/details/6031576






glibc libc 


glibc libc 都是 Linux 下的 C函数库。 

libc Linux 下的 ANSI C 函数库;glibc Linux下的 GUN C函数库。 


ANSI C GNU C有什么区别呢? 


       ANSI C 函数库是基本的 C语言函数库,包含了 C语言最基本的库函数。这个库可以根据头文件划分为 15个部分,其中包括: 

  1. <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
  2. <errno.h>:定义用来报告错误条件的宏;
  3. <float.h>:包含系统的浮点数大小限制;
  4. <math.h>:包含数学库函数的函数原型;
  5. <stddef.h>:包含执行某些计算 C所用的常见的函数定义;
  6. <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;
  7. <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
  8. <string.h>:包含字符串处理函数的函数原型;
  9. <time.h>:包含时间和日期操作的函数原型和类型;
  10. <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
  11. <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
  12. <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
  13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
  14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
  15. <assert.h>:包含宏和信息,用于进行诊断,帮助程序调试。

上述库函数在其各种支持 C 语言的 IDE中都是有的。 


       GNU C 函数库是一种类似于第三方插件的东西。由于 Linux是用 C语言写的,所以 Linux的一些操作是用 C语言实现的,因此,GUN组织开发了一个 C语言的库以便让我们更好的利用 C语言开发基于 Linux 操作系统的程序。不过现在的不同的 Linux的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了。 

查看当前系统的 glibc 版本的方法: 

(1)/lib/libc.so.6

(2)ldd - -version


      错误观点glib前面有个 "g",所以认为 glib GNU的东东;同时认为 glibc glib的一个子集。 

      其实,glib glibc基本上没有太大联系,可能唯一的共同点就是,其都是 C编程需要调用的库而已。 

glib Gtk+ 库和 Gnome 的基础。glib可以在多个平台下使用,比如 LinuxUnixWindows等。glib为许多标准的、常用的 C 语言结构提供了相应的替代物。 


libc 实际上是一个泛指。凡是符合实现了 C标准规定的内容,都是一种 libc

glibc GNU 组织对 libc 的一种实现。它是 unix/linux的根基之一。

微软也有自己的 libc 实现,叫 msvcrt

嵌入式行业里还常用 uClibc ,是一个迷你版的 libc


ld-uClibc-0.9.28uclibc下进行动态库连接的连接器


uclibc

计算术语中,uClibc是一个面向嵌入式Linux系统的小型的C标准库。最初uClibc是为了支持uClinux而开发,这是一个不需要内存管理单元Linux版本,因此适合于单片机系统(uCs;此处"u"是代表"micro"μ罗马化)

uClibc 是一个小型的 C库,应用于嵌入式 Linux系统开发。它基本实现了 glibc的功能,几乎所有 glibc支持的应用程序都能在 uClibc上运行,这使得应用程序的移植变得相当简单,只需要使用 uClibc库重新编译源代码就可以了。目前 uClibc主要运行在不带 MMU的平台下,支持 alpha, ARM, i386, i960, h8300, m68k, mips/mipsel, PowerPC, SH, SPARC等等。






uclibcglibc的差别

uClibcGlibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题。


1. uClibcGlibc小,虽然uClibcGlibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现,因此有些应用可能在uClibc中不能编译。

2. uClibc在可配置性上比glibc要好。

3. uClibc并不能保证发布的库二进制兼容旧版本uClibc库。当一个新的版本uClibc库被发布,则可能需要也可能不需要重新编译应用程序。

4. Glibc中调用malloc(0),将返回一个有效的指针,然而在uClibc中调用malloc(0),则返回NULL指针。根据在SuSv3中关于malloc(0)的行为的定义,两个库的实现都是正确的。对于调用relloc(NULL,0),两个库的实现也不同。个人感觉Glibc的如此实现不是特别安全。Glibcmalloc的实现可以通过MALLOC_CHECK_环境变量调节。这个方法主要用于malloc调试。这些扩展的malloc调试特性在uClibc中是不可用的。在Linux上有许多有些的malloc调试功能的库(如:dmalloc,electric fence,valgrind)Glibc中的扩展的malloc调试功能更好用。因此uClibc中去掉这些功能特性并不会有多大损失。


5. uClibc没有提供用于数据接口的库(libdb)

6. uClibc不支持NSS(/lib/libnss_*),在这方面Glibc更容易支持不同方式的认证和DNS解析。uClibc仅仅支持采用flat口令文件或者shadow口令文件存储授权信息。如果需要比这些更复杂的的授权,可以编译安装pam

7. uClibc中的libresolv库仅仅是一个桩。Glibclibresolv库中的部分并不是全部的功能uClibc都提供,许多函数都没有实现。

8.提供网络信息服务支持(NIS)libnsl(最初被称为黄页YP),被SUN扩展为发明为RPC并用于网络共享Unix口令文件。个人认为NIS是一个令人厌恶的东西并应该使用。因此,在实现相同的功能情况下采用ldapNIS更有效。uClibc虽然提供一个桩libnsl,但并不支持NIS。我们因此也不提供在Glibc下提供的位于/usr/include/rpcsvc里的头文件。

9. uClibc的区域支持并不是100%的完全。正在这方面努力 

10. uClibc的数据功能函数库内部仅仅支持long double,设置对于long double的支持也是非常有限。与此对应的只实现了较少的数学函数。如果应用程序采用double类型,则会程序会运行得较好。

11. uClibclibcrpt库不支持可重入crypt_r,setkey_rencrypt_r,因为这些也不是SuSv3所规定的。

12. uClibc直接采用内核的数据类型去定义大多数透明的数据类型。

13. uClibc支持采用linux内核结构特有的结构体"struct stat"

14. uClibc的运行时库librt当前缺少aio接口、全部的时钟接口和共享内存接口(仅仅实现定时器接口和消息队列接口)





MIPS架构的交叉编译工具问题



某些MIPS架构的机顶盒提供了六种交叉编译工具GCC,如下:
· mipsel-linux-gcc
· mipsel-linux-uclibc-gcc
· mipsel-uclibc-gcc
· mips-linux-gcc
· mips-linux-uclibc-gcc
· mips-uclibc-gcc

这六种有什么区别?分别用于什么情况呢?

1)首先,mipsmipsel的主要区别在于Big Endian(大端)和Little Endian(小端)结构。
mips对应的是Big Endian
mipsel对应的是Little Endian

2)其次,要明白uclibc库。
uclibc库是面向嵌入式Linux系统开发优化的C语言库。比GNU C Library更小,但接口兼容,且更易于配置。
uclibc可运行于标准的以及无MMULinux系统之上,支持i386x86x64ARMAVR32BlackfinH8300M68KMIPSPowerPCSuperHSPARCV850等处理器下列。
mips-uclibc-gcc表示采用uclibc库进行编译的GCC

3)至于第三点是否带linux的区别则不清楚,以后再补充吧




预定义__GNUC__

    1 __GNUC__ gcc编译器编译代码时预定义的一个宏。需要针对gcc编写代码时,可以使用该宏进行条件编译。

    2 __GNUC__ 的值表示gcc的版本。需要针对gcc特定版本编写代码时,也可以使用该宏进行条件编译。

    3 __GNUC__ 的类型是“int”,该宏被扩展后,得到的是整数字面值。可以通过仅预处理,查看宏扩展后的文本。

示例:

  #include <assert.h>

  #include <stdio.h>

  #include <typeinfo>
  #ifndef __GNUC__

    #error sample for gcc compiler

  #else

    /* use gcc special extension: #warning , __attribute__, etc.  */

  #endif

  int main() 

  {    

    printf("hello gcc %d\n",__GNUC__);    

    assert( typeid(__GNUC__)==typeid(int) );    

    printf("press Enter to exit\n");    

    (void)getchar();

  }





函数名: getenv

:从环境中取字符串,获取环境变量的值

头文件:stdlib.h

:char *getenv(char *envvar);

函数说明:getenv()用来取得参数envvar环境变量的内容。参数envvar环境变量的名称,如果该变量存在则会返回指向该内容的指针环境变量的格式为envvar=valuegetenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。

返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符的第一个字节是null

相关函数:_wgetenvgetenv_s_wgetenv_s




git取消修改,恢复版本命令大全

分类: git2014-01-15 15:41 5847人阅读评论(2)收藏 举报

#取消对文件的修改。还原到最近的版本,废弃本地做的修改。

git checkout -- <file>


#取消已经暂存的文件。即,撤销先前"git add"的操作

git reset HEAD <file>...


#修改最后一次提交。用于修改上一次的提交信息,或漏提交文件等情况。

git commit --amend


#回退所有内容到上一个版本

git reset HEAD^


#回退a.py这个文件的版本到上一个版本  

git reset HEAD^ a.py  


#向前回退到第3个版本  

git reset –soft HEAD~3  


#将本地的状态回退到和远程的一样  

git reset –hard origin/master  


#回退到某个版本  

git reset 057d  


#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit.(代码回滚到上个版本,并提交git)

git revert HEAD


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始python学习-35.allure报告企业定制

目录 1. 搭建allure环境 2. 生成报告 3. logo定制 4. 企业级报告内容或层级定制 5. allure局域网查看 1. 搭建allure环境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安装目录找到java.exe记下jbr目录的完整路径&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

系统架构札记

什么是高内聚、低耦合&#xff1f; 起因&#xff1a;模块独立性指每个模块只完成系统要求的独立子功能&#xff0c;并且与其他模块的联系最少且接口简单&#xff0c;两个定性的度量标准――耦合性和内聚性。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一…

c++中的继承--1(引出,继承方式,继承的对象模型)

继承的引出 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构…

c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征多态性(polymorphism)提供接口与具体实现之间的另一层隔膜&#xff0c;从而将“what”和“how”分离开来&#xff0c;多态性改善了代码的可读和组织性&#xff0c;同时也使创建的程序具有可扩展性&am…

Ubuntu下各种服务搭建及操作技巧

Ubuntu下搭建TFTP 1、安装软件包 sudo apt-get install tftpd tftp xinetd 2、建立配置文件 在/etc/xinetd.d/下建立一个配置文件tftp sudo vi /etc/xinetd.d/tftp 内容如下 service tftp { socket_type dgram protocol udp wait yes user root …

使用Automake和Autoconf生成Makefile

automake 所产生的 Makefile 除了可以做到程序的自动编译和链接 外&#xff0c;还可以用来生成各种文档&#xff08;如manual page、info文件&#xff09;&#xff0c;可以将源代码文件包装起来以供发布。所以程序源代码所存放的目录 结构最好符合GNU的标准惯例。下面以hello.…

c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)

虚析构和纯虚析构 虚析构virtual ~类名(){}类内声明&#xff0c;类内实现解决问题&#xff1a;通过父类指针指向子类对象释放时候不干净的问题 纯虚析构 写法 virtual ~类名(){}0; 类内声明 类外实现 如果出现了纯虚析构函数&#xff0c;这个类也算是抽象类&#xff0c;不可…

嵌入式开发硬件知识札记

三态逻辑 1. 概念 三态指其输出既可以是一般二值逻辑电路&#xff0c;即正常的高电平&#xff08;逻辑1&#xff09;或低电平&#xff08;逻辑0&#xff09;&#xff0c;又可以保持特有的高阻抗状态。高阻态相当于隔断状态&#xff08;电阻很大&#xff0c;相当于开路&#xff…

《凡人修仙传》中打斗场景(c++多态实现)

我们 要实现打斗场景&#xff0c;第一&#xff0c;我们需要有打斗的双方&#xff0c;一个是英雄&#xff0c;一个是怪物&#xff0c;他们都有自己的属性&#xff0c;比如攻击&#xff0c;防御&#xff0c;血量。其次我们的英雄还会有武器。武器上有一些加成属性&#xff0c;可以…

c++中的文件读写的操作

写文件 ofstreamopen指定打开方式isopen判断是否打开成功ifs<<“数据”ofs.close&#xff08;&#xff09; 读文件 ifstream ifs 指定打开方式ios::in isopen判断是否打开成功 读取有三种方式 #include<iostream>using namespace std;//文件读写头文件#incl…

c++的STL--1概念通述

STL的概念 什么是STL? STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 STL从广义上分为&#xff1a;容器(container)&#xff0c;算法(algorit…

c++的vector容器

vector容器概念 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它…

新一代数据库技术

新一代非关系型数据库有以下5个主要类型&#xff1a; 面向文件存储&#xff1a;适用于存储海量文件&#xff0c;代表产品MongoDb 列存储(wide column store/column-family)数据库&#xff1a;快速查找相关数据&#xff0c;相关数据被放在同一列中&#xff0c;代表产品Cassandra…

c++中stack容器

Stack 简介 stack 是堆栈容器&#xff0c;是一种“先进后出”的容器。stack 是简单地装饰 deque 容器而成为另外的一种容器。#include stack没有迭代器 Stack所有元素的进出都必须符合“先进后出”的条件&#xff0c;只有stack顶端的元素&#xff0c;才有机会被外界取用&am…

c++中的queue容器

queue容器 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端 提取元素。 队列作为容器适配器实现&#xff0c;容器适配器即将特定容器类封装作为其底层容器类&#xff0c;queue提供一组特定的 成员…

c++中list容器

list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。list与for…

c++中容器(STL)的共性与使用的时机

容器的共通能力 C模板是容器的概念 理论提高&#xff1a;所有容器提供的都是值&#xff08;value&#xff09;语意&#xff0c;而非引用&#xff08;reference&#xff09;语意。容器执 行插入元素的操作时&#xff0c;内部实施拷贝动作。所以 STL 容器内存储的元素必须能够被…

Qt Creator 窗体控件自适应窗口大小布局

常见的软件窗口大小改变&#xff08;最大化、手动改变时&#xff09;需要窗口的部件能够自适应布局&#xff0c;而在Qt的应用程序界面设计中&#xff0c;对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多&#xff0c;多数说的很含糊&#xff0c;还…

QT子线程与主线程的信号槽通信

最近用QT做一个服务器&#xff0c;众所周知&#xff0c;QT的主线程必须保持畅通&#xff0c;才能刷新UI。所以&#xff0c;网络通信端采用新开线程的方式。在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦。网上提供了很多同一线程不同类间采用信号槽通信的方式&#xff0c;…