![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
tianyingang
感谢关注
展开
-
Linux奇技淫巧之-使用setarch 禁止地址空间随机化
了解Linux内核地址空间布局随机化(ASLR)以及如何禁用该特性原创 2024-02-23 18:35:54 · 540 阅读 · 0 评论 -
Linux read命令详解
2.read从标准输入读取一行数据,并将其split,再将split后的字段赋值给read命令最后指定的变量,下面的例子中,从标准输入读取一行,split后将第一个字段的值赋值给yourname变量,即Gilbert,将第二个字段的值赋值给yourage变量,即30,split默认的分隔符是IFS变量的值,这个值默认是空格。6.默认遇到换行符read命令返回,可以限制读入的总字符数,当输入的总字符数达到后read立即返回,7. 指定结束符,默认遇到换行符结束读取,read返回,通过-d可以指定新的结束符。原创 2024-01-10 13:37:35 · 720 阅读 · 0 评论 -
如何高效阅读Linux的man page
本文讲解了如何查找bash内置命令(如read,kill 等)的参考手册,并以较为美观的方式展示出来原创 2024-01-09 10:57:14 · 585 阅读 · 0 评论 -
char*加上一个整数会发生什么?
a指向一个字符串"hello", "hello"代表这个字符串的起始地址,那么,"hello" + 1就代表这个字符串的第二个字符所在的地址。因此b相当于在a的基础上向后移了一位,因此b指向的字符串为"ello",此时a和b会指向同一个字符串的不同位置吗?不过通过这个例子可以说明给字符串加上整数会发生什么。原创 2023-09-27 09:16:45 · 236 阅读 · 0 评论 -
为什么crontab无法拉起进程
你有没有经历过这种情况,你写了一个进程自动拉起脚本,然后将这个脚本配到crontab,当你手动执行这个脚本的时候,是可以拉起这个进程的,但是crontab就是无法拉起。要验证这个猜想很简单,在你的自动拉起脚本中加一句env > /path/to/your/file,这样,当crontab运行这个脚本时就会将环境变量导入到这个文件中,你再将它和你当前会话shell中的环境变量比较一下,就能发现差异了。怎么解决这个问题呢?原创 2023-03-08 15:08:57 · 261 阅读 · 1 评论 -
关于C++ 输出操作符重载
写了这样一个测试程序头文件:#ifndef C_TEST_BASICCONCEPTTEST_H#define C_TEST_BASICCONCEPTTEST_H#include <iostream>class cal {public: friend std::ostream &operator<<(std::ostream &os, const cal &print) ; friend cal operator+(cons原创 2020-05-09 18:30:41 · 176 阅读 · 0 评论 -
Varint编码
LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验。下面就对varint编码进行学习。传统的integer是以32位来表示的,存储需要4个字节,当如果整数大小在256以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省3个字节的存储空间,Google varint就是根据这种思想来序列化整数的原贴https://www.cnblogs...转载 2020-04-30 15:21:36 · 271 阅读 · 0 评论 -
google test 检查宏总结
布尔值检查Fatal assertion Nonfatal assertion Verifies ASSERT_TRUE(condition); EXPECT_TRUE(condition); conditionis true ASSERT_FALSE(condition); EXPECT_FALSE(condition); conditioni...转载 2020-04-30 10:54:41 · 568 阅读 · 0 评论 -
google test安装
#复制代码到本地git clone git@github.com:google/googletest.gitcd googletest/googletest/#在CMakeList.txt中作如下修改#添加一行SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")#将下面一行的OFF改成ON # BUILD_SHARED_LIBS is a stand...原创 2020-04-30 10:39:22 · 1017 阅读 · 0 评论 -
socket can 的配置
起因:拿到一套阿波罗自动驾驶的硬件.其中包括一台NVIDIA JETSON TX2和一张CAN卡,型号为SN65HVD230 CAN Board.这个型号和apollo在github 上说明的CAN卡型号CAN-PCIe/402(产品页https://esd.eu/en/products/can-pcie402)不一样.于是就有两个问题:1.硬件连接上网搜索tx2的gpio扩展...原创 2020-04-26 16:51:47 · 1254 阅读 · 0 评论 -
ssize_t 和 size_t
#ifndef __SIZE_TYPE__#define __SIZE_TYPE__ long unsigned int#endif#if !(defined (__GNUG__) && defined (size_t))typedef __SIZE_TYPE__ size_t;//size_t是无符号长整形# define __STD_TYPE t...原创 2020-04-20 11:13:01 · 173 阅读 · 0 评论 -
使用管道在两个相关进程之间传输数据
intmain(int argc,char **argv){ pid_t pidChild; int pip[2]; pipe(pip); pidChild = fork(); switch(pidChild){ case -1: exit(-1); case 0:{//child ...原创 2020-04-07 21:09:50 · 408 阅读 · 0 评论 -
打印文件类型
#include <stdlib.h>#include <fcntl.h>#include <sys/stat.h>char * printFileType(const char *filename, struct stat *buf){ int fd = open("/home/zhihui/Music",O_RDONLY); fst...原创 2020-04-07 20:24:08 · 319 阅读 · 0 评论 -
Linux shell脚本处理sudo ssh交互问题
可以通过这种方式来以脚本形式执行ssh操作,并执行远程主机上面的命令#!/usr/bin/expect -fspawn ssh nvidia@192.168.1.100expect "*password:"send "nvidia\r"expect "$*" { send "cd zhkj_uav/\r"}expect "$*" { send "./sensorfusio...原创 2020-03-18 10:43:17 · 644 阅读 · 0 评论 -
strlen和sizeof()的区别
strlen 计算不包含终止 null 字节的字符串长度,而 sizeof 则计算包括终止 null字节的缓冲区长度。两者之间的另一个差别是,使用 strlen 需进行一次函数调用,而对于sizeof 而言,因为缓冲区已用已知字符串进行初始化,其长度是固定的,所以 sizeof 是在编译时计算缓冲区长度。...原创 2020-03-13 15:23:03 · 100 阅读 · 0 评论 -
APUE学习笔记:10.15 函数sigsetjmp和siglongjmp
输出 $ ./ctest &[1] 7432starting main: SIGQUIT$ kill -USR1 7432starting sig_usr1: SIGQUIT SIGUSR1$ in sig_alrm: SIGQUIT SIGUSR1 SIGALRMfinishing sig_usr1: SIGQUIT SIGUSR1ending main:...原创 2020-01-18 17:02:45 · 95 阅读 · 0 评论 -
apue自学笔记14.3 记录锁.fcntl记录锁
函数原型如下:#include<fcntl.h>int fcntl(int fd,int cmd,.../* struct flock *flockptr */); //返回值:若成功,依赖于cmd,否则,返回-1//cmd 取下面三个值之一# define F_GETLK 5 /* Get record locking inf...原创 2020-01-01 14:35:22 · 167 阅读 · 0 评论 -
关于setpgid函数的小知识点
我想在主进程里面调用setpgid()来将第一个子进程的进程组ID设置为第二个进程的进程ID,想知道这样会不会自动创建一个新的进程组,第二个子进程作为进程组组长。代码如下#include <stdio.h>#include <stdlib.h>#include <zconf.h>int main() { pid_t pid1,pid...原创 2019-12-27 01:10:02 · 1814 阅读 · 0 评论 -
超声波雷达环境配置
1990 source cmake-build-debug/devel/setup.bash 1991 roslaunch sonar sonar.launch 1992 pip3 install rospkg 1993 roslaunch sonar sonar.launch 1994 pip install rospkg 1995 pip3 install wh...原创 2019-12-25 18:25:12 · 879 阅读 · 0 评论 -
Linux_unix系统编程手册30.2.4
运行Linux_unix系统编程手册30.2.4代码程序清单30-4发现输出与书中给出的不符。源代码如下:预期输出为:我的代码除了打印输出没有使用errExitEN函数以外,其他都和示例程序一致。如下:#include <stdlib.h>#include <stdio.h>#include <pthread.h>...原创 2020-01-18 17:03:53 · 177 阅读 · 0 评论 -
.rules文件创建
有时候有些设备(例如usb can 分析仪,usb 串口)等需要root权限才能读写。下面介绍一种方法,可以不用root 权限就能读写。首先在命令行下使用命令lsusb 查看usb 设备,比如下面的就是我在自己电脑上面使用这条命令的结果Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Devi...原创 2019-11-27 20:48:58 · 4650 阅读 · 1 评论 -
linux alarm函数
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <signal.h>void sig_handler(int signo){ char * sd = strsignal(signo); p...原创 2019-11-15 11:52:50 · 125 阅读 · 0 评论 -
Linux core 文件
==============================================================core_pattern:core_pattern is used to specify a core dumpfile pattern name.. max length 127 characters; default value is "core"...转载 2019-11-14 23:35:05 · 86 阅读 · 0 评论 -
linux signal number
/* Signal number definitions. Linux version. Copyright (C) 1995-2016 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redi...原创 2019-11-13 17:12:44 · 850 阅读 · 0 评论 -
linux学习阙疑
早期UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理是因为一个信号发生了,进程捕捉到它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用。前面一句说当捕捉到一个信号时系统调用被中断不再继续执行,后面为什么又说是一个好机会应当唤醒阻塞的系统调用?...原创 2019-11-13 11:36:55 · 67 阅读 · 0 评论 -
linux errno值
#ifndef _ASM_GENERIC_ERRNO_H#define _ASM_GENERIC_ERRNO_H#include <asm-generic/errno-base.h>#define EDEADLK 35 /* Resource deadlock would occur */#define ENAMETOOLONG 36 /* File name too ...原创 2019-11-11 11:01:37 · 497 阅读 · 0 评论 -
对非特权用户来讲setuid 和 setgid 有什么用
#include <unistd.h>int setuid(uid_t uid);int setgid(gid_t gid);对特权用户来讲setuid 将进程的实际用户ID,有效用户ID,保存的设置用户ID全都设置为 uidsetgid 将进程的实际组ID,有效组ID,保存的设置组ID全都设置为 uid这个很好理解。对非特权用户来讲当uid等于实际用户...原创 2019-11-11 10:43:02 · 233 阅读 · 0 评论 -
在linux新建用户后无法从图形用户界面登录?原因在这里!
一般用useradd添加新用户,然后用passwd命令添加密码,但是这时候用户的家目录并没有创建,用户的登录shell 也没有设置,所以这时候要设置用户的登录shell ,创建家目录,将家目录的所有者所属组都改为新创建的用户ID和组ID,这时候就可以同GUI登录了。...原创 2019-11-08 20:06:43 · 3302 阅读 · 0 评论 -
Linux 小技巧 :root用户可强制踢除其它登录用户
linux系统root用户可强制踢除其它登录用户,首先可用w命令查看登录用户信息,显示信息如下:[root@localhost ~]# w10:32:06 up 12:28,5 users,load average: 0.00, 0.00, 0.00USERTTYFROMLOGIN@IDLEJCPUPCPU WHA...转载 2019-11-08 19:42:56 · 473 阅读 · 0 评论 -
linux 小技巧 :执行 ls -al 命令后第一行出现的total 是什么意思?
可知 total 代表文件系统块的总数# ls -sltotal 124 drwxrwxr-x 6 zhihui zhihui 4096 Oct 23 10:29 qin_pro4 drwxr-xr-x 2 root root 4096 Nov 8 19:26 yr4 drwxrwxr-x 3 zhihui zhihui 4096 Oct 8 10:57 秦pr...原创 2019-11-08 19:39:35 · 877 阅读 · 0 评论 -
fork创建一个进程
#include <stdio.h>#include <unistd.h>void son_process_handler(void);void parent_process_handler(void);int main(int argc,char ** argv) { pid_t pid; pid = fork(); if(pid == 0...原创 2019-11-06 22:19:26 · 181 阅读 · 0 评论 -
getpid getppid getuid geteuid getgid getegid函数使用
#include <stdio.h>#include <unistd.h>int main(int argc,char ** argv) { pid_t pid_tmp; pid_tmp = getpid(); printf("the ID of the process is : %d\n",pid_tmp); pid_tmp = getp...原创 2019-11-06 22:04:50 · 363 阅读 · 0 评论 -
多线程例程
#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <stdbool.h>#include <zconf.h>bool flag = true;void * thread_handler1(void * para){ while(fla...原创 2019-11-06 18:08:01 · 123 阅读 · 0 评论 -
getenv函数
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <shadow.h>#include <grp.h>intmain(int argc,char **argv){ if(argc != 2){ printf("usag...原创 2019-11-06 11:07:55 · 303 阅读 · 0 评论 -
strftime 函数
#include <stdio.h>#include <time.h>int main(int argc,char ** argv) { time_t time1; time(&time1); struct tm tm1; tm1 = *(localtime(&time1)); char buf[1000];...原创 2019-11-05 23:51:24 · 317 阅读 · 0 评论 -
time函数 localtime函数获取当前时间
#include <stdio.h>#include <time.h>int main(int argc,char ** argv) { time_t time1; time(&time1); struct tm tm1; tm1 = *(localtime(&time1)); printf("%d-",tm...原创 2019-11-05 23:26:18 · 1118 阅读 · 0 评论 -
基本数据类型
/* Structure of the password file. */struct spwd { char *sp_namp; /* Login name. */ char *sp_pwdp; /* Encrypted password. */ long int sp_lstchg; /* Date of last change. */ l...原创 2019-11-05 18:08:10 · 140 阅读 · 0 评论 -
getpwent函数
#include <stdio.h>#include <pwd.h>intmain(){ struct passwd * pw_Ptr ; while((pw_Ptr = getpwent()) != NULL){ printf("%s:",pw_Ptr->pw_name); printf("%s:",pw_...原创 2019-11-05 17:00:32 · 420 阅读 · 0 评论 -
Linux 获取/etc/passwd函数getpwuid getpwnam
#include <stdio.h>#include <pwd.h>intmain(){ struct passwd * pw_Ptr ; pw_Ptr = getpwuid(1000); //pw_Ptr = getpwnam("zhihui"); if(pw_Ptr == NULL){ printf("...原创 2019-11-05 16:51:56 · 336 阅读 · 0 评论 -
段错误
原创 2019-11-05 11:31:26 · 150 阅读 · 0 评论