- 博客(57)
- 资源 (3)
- 收藏
- 关注
原创 linux 下连接mysql(下)
右连接和左连接正好相反,在两张表中找不到匹配的记录,右侧表的记录仍需放到结果集中,取不到值的字段显示为NULL.如果年龄大于等于15,输出>=15,年龄在10到15之间,输出10<=age<=15,其余输出<10.左连接:在两张表中找不到匹配的记录,左侧表的记录仍需放到结果集中,取不到值的字段显示为NULL.分组的作用是:将数据以指定的字段分称多个组,在分组内执行汇总函数.下面只显示平均分大于90的同学的最高分,最低分和平均分.视图就是查询语句的一个别名,它不会存储查询的结果.
2025-02-13 19:20:50
891
原创 使用Posix共享内存区实现进程间通信
shm_open调用成功后返回共享内存区的文件描述符, 并在/dev/shm目录下生成相应的文件。shm_unlink和shm_open在同一文件中,用于删除共享内存区。在打开已存在的共享内存区时,可以用fstat获取共享内存区的大小。shm_open函数声明包含在文件。ftruncate包含在头文件。oflag的值包含在文件。mode的值包含在文件。fstat包含在头文件。mmap包含在头文件。
2025-02-04 18:28:29
467
原创 shell中的$
$*和\$@ 的区别 : "\$*"会把所有参数当作一个字符串使用.$()是命令替换,可以将命令的结果赋值给变量。"\$@":将参数当成一个列表使用。$[] 可以在方括号内进行数值计算。单独的方括号[] 是用作条件判断。\$*和\$@ 是获取所有参数。$+数值是获取位置变量。${}是取数组中的数据。
2024-11-07 14:06:12
362
原创 环境变量
登录shell后就可定义变量,用等号为变量赋值:变量名=值,等号两边不能有空格。使用变量的值的时候,在值前面加$。如果值里含有空格,需要用双引号或单引号括起来。定义全局变量的方式是在局部变量前面加 export全局变量和局部变量的区别是:局部变量只能在当前进程访问,在子进程中访问不到。全局变量可以在子进程中访问。#定义全局变量var_g和局部变量var_l#在当前进程输出#进入子进程bash,输出变量~$ bash#推出子进程,回到当前bash,输出变量~$ exitexit。
2024-11-03 13:21:43
212
原创 用户和文件权限
可以只修改用的的属主,也可以同时修改所属的用户和分组。不加 -r选项,只是删除用户,不会删除home目录。SUID:用户执行该文件时,会以文件属主的权限运行。SGID:用户执行该文件时,会以文件属主的权限运行。不加 -m选项只是创建用户,不创建home目录。第一列(-rw-rw-r–)是文件类型和权限。设置粘滞位的文件,只有属主和特权用户可以删除。其余九位是 属主,属组和其他用户对应的权限。usermod -G 分组 用户名。useradd -m 用户名。userdel -r 用户名。
2024-11-03 13:19:24
415
原创 搞懂浮点数
数值权与小数点的位置有关,小数点左边是10的非负幂,取整数值。的数,其他的值只能近似的表示。因为500正好等于舍入位的1/2,并且舍入位是偶数,所以向下舍入,1.22。因为500正好等于舍入位的1/2,并且舍入位是奇数,所以向上舍入,1.24。M:尾数,是一个二进制小数,取值范围[0,1)或[1,2)因为499小于舍入位的1/2,向下舍入,1.22。因为501大于舍入位的1/2,向上舍入,1.23。100正好是1/2,并且舍入位是奇数,向上舍入,100正好是1/2,并且舍入位是偶数,向下舍入,
2024-07-16 23:50:19
505
原创 Git基础命令
Git 保存项目元数据和对象数据库的地方,这是Git最重要的部分,也是从其他计算机克隆仓库时要复制的内容。我的仓库里原来有个空文件show_bytes.cpp,我修改了这个文件,再次执行。项目某个版本的单次检出,这些文件从仓库中检出,供以后使用和修改。要想在Git中对现有项目进行跟踪管理,只需在项目目录中执行。命令跳过暂存区,直接将所有已跟踪的文件提交到本地仓库。现在已经有了仓库,下一步是对仓库中的项目做一些修改。第一种是把现有的项目或者目录导入到Git中。模块列出的将要提交到本地仓库的文件列表。
2024-07-16 23:49:00
1071
原创 构造、析构、拷贝(Semantics of Construction,Destruction,and Copy)
如果类没有定义析构函数,那么只有在类内的成员或基类拥有析构函数时,编译器才会合成一个析构出来。如果在构造函数里调用虚函数,那么调用的将是当前类里的那个函数,不会调用派生类里的虚函数。原因是:vptr的设置时间点是在 所有基类构造完之后,用户代码之前。如果T有一个默认构造函数,它会被调用。当我定义一个object如下。
2024-07-13 23:23:09
391
原创 函数语意学(The Sematics of Function)
c++ 设计准则之一就是:非静态成员函数至少和非成员函数有相同的效率。因为c++支持函数重载,所以在处理成员函数名称的时候加上了参数列表。一般情况下,会在成员名称后加上类名。如果成员函数是const 则变成。下面是处理后的Point类。Foo会被处理成下面这样。
2024-07-13 18:21:03
319
原创 构造函数语意学(The Semantics of Constructors)
和带有虚函数的情况类似。类似的道理,如果一个类没有定义任何构造函数,而他的父类含有默认构造。编译器则在需要的时候给这个类生成一个默认构造,用以调用父类的默认构造。如果一个类存在虚基类,编译器会为生成一张虚基类表用以存放所有的虚基类,会在类中安插一个虚基类表指针指向虚基类表。因为a和b的vptr指向的是同一张虚函数表,所以这里可以直接按位拷贝,不需要生成拷贝构造。如果这个类没有任何构造,编译器则会生成一个默认构造,用于正确设置虚基类表指针。举个例子,下面的程序中,编译器会为Bar生成一个默认构造。
2024-07-09 05:11:47
535
原创 删除账户相关信息
由于ls 不支持管道,所以通过xargs将 echo 输出 fileout、loop.sh、sedout传给了 ls。下面开始处理属于用户的正在运行的进程。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.3、最后将pid列表通过xargs传给kill命令。1、先通过 ps -u 命令查找属于用户的进程。2、将ps 的结果传给gawk,解析出pid。
2024-07-04 23:06:08
404
原创 git初识
客户端和服务端一样,先安装git,然后创建一个目录,在目录下执行 git init (不需要传参数)。成功后会在本地生成一个和仓库同名的目录,我们要将需要上传的文件放到这个目录里。远程仓库路径:home/ubuntu/gitrepo/runoob.git。新增用户git,将给runoob.git的所属改成git。git clone 用户名@服务器ip:仓库路径。向远程仓库推送文件前,需要先配置远程仓库地址。2、然后将暂存区的文件上传到本地仓库。3、将本地仓库的文件推送到远程仓库。仓库所属用户:git。
2024-07-04 23:04:46
620
原创 SHELL脚本学习——自动备份
tar {operation} [options…在archive目录下生成了文件20240701.tar.gz。tar有一条警告信息,指出它删除了路径中的斜杠。,这意味着将绝对路径改成了相对路径。-z 通过gzip指令处理备份文件。时间表使用方法请参考。定时执行程序 可使用。
2024-07-01 21:55:45
469
原创 SHELL脚本学习(十四)gawk进阶
gawk的自定义变量由任意个字母、数字和下划线组成,但不能以数字开头。gawk自定义变量区分大小写。可以用赋值语句定义数组变量。格式如下;var:数组变量名index:索引element:索引对应的值格式:statements。
2024-07-01 21:52:37
1037
原创 SHELL脚本学习(十三)初识 gawk 编辑器
gawk提供了一种编程语言,而不仅仅是编辑器命令。定义变量保存数据使用算数和字符串运算符处理数据使用结构化编程概念 为数据处理添加处理逻辑提取文件中的数据并将其重新排列组合,最后生成格式化报告。
2024-06-28 22:59:10
495
原创 SHELL脚本学习(十二)sed进阶
sed 编辑器的基础命令都是对一行文本进行操作。如果要处理的数据分布在多行中,sed基础命令是没办法处理的。幸运的是,sed编辑器的设计人员已经考虑了这个问题的解决方案。sed编辑器提供了3个处理多行文本的特殊命令。命令描述N加入数据流的下一行,创建一个多行组进行处理D删除多行组中的一行P打印多行组中的一行。
2024-06-28 22:58:29
892
原创 SHELL脚本学习(十一)正则表达式
除了定义自己的字符组,BRE(basic regular expression 基础正则表达式)还提供了一些特殊字符组。在字符组前加上脱字符即为排除型字符组。排除型字符组的语义正好和字符组相反,不匹配字符组内的任一字符。用于定义字符组,字符组内的任一字符匹配,即为匹配。可以单连字符(-)表示区间。即 起始字符-结束字符。特殊字符组的使用方式和普通字符组一样。)能够匹配除换行符之外的所有字符。,表示该字符必须匹配0次或多次。美元符号($)指出行尾位置。
2024-06-21 19:40:58
1254
原创 SHELL脚本学习(十)初识 sed编辑器
默认情况下sed会将指定的命令应用于STDIN输入流中。因此,可以直接将数据通过管道传给sed编辑器进行处理。s:替换命令。会用第二个字符串(orange)替换第一个字符串(apple)。
2024-06-21 13:01:58
974
原创 SHELL脚本学习(九)函数
如果在脚本主体定义了一个全局变量,那么就可以在函数中读取它的值。类似的,在函数内部定义全局变量,在脚本主体也可以访问它的值。要解决这个问题,必须先将数组拆分成多个数组元素,然后将这些数组元素当作参数传递。该函数的退出状态码是2,因为函数最后一个命令执行失败了。正如将命令的输出保存到shell变量一样,也可以将函数的输出保存到shell变量中。默认情况下,函数的退出状态码是函数最后一个命令返回的状态码。语句按正确顺序输出数组的各个元素,然后脚本再将数组元素组装成新的数组。函数向脚本返回数组也采用相似的方法。
2024-06-13 23:15:58
866
原创 SHELL脚本学习(八)实战演练
2、输入数据3、shell脚本4、结果二、捕获脚本信号,并将脚本置于后台运行1、预期效果格式:在后台执行 command,并忽略信号signals
2024-06-13 15:43:19
289
原创 SHELL脚本学习(七) 脚本控制(2)
nice命令阻止普通用户提升命令的优先级,但是即便提高优先级的操作没有成功,也不影响命令的执行。cron在后台运行,并会检查一个特殊的表(cron时间表),从中获知需要执行的作业。如果指定的时间已经过去,at命令会在第二天的同一时间执行指定的作业。要想让任务以更低优先级运行,只需用nice命令的-n选项指定新的优先级。在linux系统中由shell启动的进程默认优先级是相同的。如果对于时间的精确性要求不高,则可以使用预配置的cron脚本目录。renice 命令可以修改系统中已运行的命令的优先级。
2024-06-13 12:07:35
840
原创 SHELL脚本学习(七) 脚本控制
shell将运行的各个进程称为作业,并为其分配在当前shell内唯一的作业号。有时候即便是退出了终端会话,也想在终端会话中启动shell脚本,让脚本一直以后台模式运行到结束。由于nohup命令会解除终端和进程的关联,因此不再同STDOUT和STDERR绑定在一起。要想在脚本中的不同位置进行不同的信号捕获处理,只需重新使用带有新选项的trap命令即可。想要移除信号,在trap命令与希望恢复默认行为的信号列表之间加上连字符(–)即可。除了在shell脚本中捕获信号,也可以在shell脚本退出时捕获信号。
2024-06-12 22:49:09
1180
原创 SHELL脚本学习(一)
输出所有数据 echo ${my_array[*]}shell脚本第一行:说明使用的是哪个shell。管道负责将一个命令的输入传送到另一个命令的输入。`` 和 $() 将命令的返回值复制给变量。要将数学运算赋值给变量,可以使用$和[];查看bash的路径:which bash。如果不想覆盖文件的内容可以使用“"负责将文件的内容重定向到命令。浮点数运算可以使用bc命令。
2024-05-31 12:59:37
425
原创 记录几个常用的命令
12、grep [option] 匹配模式 [file] : 查询包含匹配模式的行(支持正则表达)1、创建由file1和file2组成的压缩包,生成的文件名为file.tar。11、sort 文件名 : 排序指定文件中的数据,默认按字符串比较。4、mv: 将文件和目录移动到另外一个位置,或重命名。-i : 如果目标文件已存在,询问是否覆盖。2、列出file.tar中包含的文件。-e: 匹配模式: 多个匹配模式。3、提取file.tar中的文件。计算文件的行数,单词数,字节数。
2024-05-31 12:57:35
207
原创 LINUX下IO复用——EPOLL
与select 和 poll相比 epoll只返回触发事件的fd,不再需要检查所有监听的文件描述符。//timeout:指定以毫秒为单位的最大等待时间(-1 == infinite)//epoll_create()返回的文件描述符应该用close()关闭。//函数正确:返回出发事件的个数,并将事件复制到events中。//错误 :返回-1并将errno变量设置为特定错误代码。//创建epoll实例。//maxevents:events的最大容量。//等待epoll实例epfd上的事件。
2024-05-15 00:31:30
190
原创 LINUX下IO复用——POLL
fds : pollfd结构数组nfds :fds中的元素个数timeout :超时时间,单位毫秒。-1 表示一直等待,直到有监听的事件发生。
2024-05-10 17:38:02
233
原创 程序员的自我修养第二章
语法分析器 产生的语法树是以表达式为节点的树,符号和数字是最小的表达式,通常作为语法树的叶子节点。经过语义分析阶段后,整个语法树的表达式都被标记了类型,如果某些类型涉及到隐式转换,语义分析程序会在语法树中插入相应的节点。编译器多能分析的语义是静态语义,即在编译器可以确定的语义,与之对应的是动态语义,即在运行期才能确定的语义。将中间代码翻译成机器代码,这个过程十分依赖目标机器,因为不同的机器有着不同的字长、寄存器、整数类型 和 浮点数类型。扫描器的任务很简单,只是进行简单的词法分析。
2023-08-01 18:36:30
84
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人