Linux
文章平均质量分 51
Goallegoal
左手击筑,右手编程。
展开
-
pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1)计算页偏移
pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1)计算页偏移在mmap的手册中有一段示例代码,其中有一行:offset = atoi(argv[2]);pa_offset = offset & ~(sysconf(_SC_PAGE_SIZE) - 1);/* offset for mmap() must be page aligned */这一行代码表示的含义是:计算出内存中的页偏移量。具体的计算过程可以例举几个值计算一下,得到的原创 2021-04-18 15:49:52 · 1532 阅读 · 0 评论 -
Linux C 编程中的条件变量与互斥锁
Linux C 编程中的条件变量与互斥锁条件变量这里先不引入条件变量的应用场景,我们先来了解什么是条件变量以及条件变量可以实现什么样的功能。使用man手册查看关于条件变量的信息,如下:A condition (short for ``condition variable’’) is a synchronization device that allows threads to suspend execution and relinquish the processors until s原创 2021-04-17 08:48:23 · 377 阅读 · 0 评论 -
man手册中没有pthread_cond_init内容的解决方案
man手册中没有pthread_cond_init内容的解决方案在多线程编程条件变量部分,遇到需要使用pthread_cond_init,但是ubuntu@ubuntu:~/Desktop/linux$ man pthread_cond——initNo manual entry for pthread_cond_init在网上查找解决方案时发现有博主说可以通过安装manpages来解决:sudo apt-get install manpages-posix-dev但是安装完之后还是提示找不到原创 2021-04-16 08:19:39 · 1497 阅读 · 3 评论 -
非亲缘关系的两个进程以共享内存方式通信时,二者共享内存地址的值是否相同
非亲缘关系的两个进程以共享内存方式通信时,二者共享内存地址的值是否相同在终端中运行一次程序,该程序中的父子进程使用同一块共享内存进行通信,由于fork()时子进程继承父进程的数据空间、堆、栈等,所以变量的地址相同,因此在父子进程中分别打印该块共享内存的地址,得到的值是相同的。如果在进行通信的两个进程是相互独立的,但以共享内存的方式传递信息,那么该块共享内存在两个不同进程中的值是否相同呢?#include "common.h"// Usage: ./a.out -t 1|2 -m "message"原创 2021-04-15 11:13:07 · 929 阅读 · 0 评论 -
父进程中getpid()值与子进程中getppid()值不相同的问题及解释
父进程中getpid()值与子进程中getppid()值不相同的问题及解释使用fork()创建一个新的子进程,并调用getpid()与getppid()查看父子进程之间的pid的关系。示例代码如下:#include "common.h"int main() { pid_t pid; if ( (pid = fork()) < 0 ) { perror("fork()"); exit(1); } if ( pid ) { printf("parent process <原创 2021-04-13 17:03:13 · 2379 阅读 · 0 评论 -
Linux系统下执行history中的指令
Linux系统下执行history中的指令在Linux系统中,使用history指令可以查看最近使用过的指令,例如:ga@a:~$ history 1462 rm *.txt 1463 ls 1464 history 1465 which fc 1466 tldr fc 1467 history 1468 ls 1469 history 1470 ls 1471 history 1472 ls这里仅展示了部分曾使用过的指令,当需要重新使用其中的某条原创 2020-12-18 16:04:17 · 566 阅读 · 1 评论 -
shell脚本实现查找素数-暴力、素数筛、线性筛
shell脚本实现查找素数-暴力、素数筛、线性筛暴力求解 1 #!/bin/bash 2 3 if [[ $# -ne 2 ]];then 4 echo "Usage: $0 start_num end_num" 5 exit 6 fi 7 8 START=$1 9 END=$2 10 11 function isPrime() { 12 num=$1 13 local i 14 for (( i=2; i&l原创 2020-12-16 11:12:04 · 442 阅读 · 0 评论 -
Linux中设置文件的特殊权限-set_uid、set_gid、sticky bit
Linux中设置文件的特殊权限-set_uid、set_gid、sticky bitset_uid,占位符s,二进制程序文件(非脚本),用户在执行该程序时获取程序所有者权限例如对于passwd可执行程序,查看其权限为-rw-r--r-- 1 root root 1732 Dec 14 10:03 passwd这里可以看到对于普通用户来说,是没有passwd的可执行权限的,但是依然可以调用该命令进行密码的修改,这是因为增加了 set_uid 的权限,当用户执行该程序时获取程序所有者的权限原创 2020-12-14 14:26:42 · 356 阅读 · 0 评论 -
Linux系统中的/etc/fstab文件
Linux系统中的/etc/fstab文件/etc/fstab是用来保存静态文件系统信息的。在系统启动的过程中,会有一个加载虚拟文件系统的步骤,然后将内核加载到虚拟文件系统中启动第一个进程systemd,然后再加载文件系统。而在/etc/fstab文件中记录着整个机器对应的系统盘信息,系统在启动之初并没有系统盘,在内核、systemd进程相继启动后,才会基于这个/etc/fstab文件中的信息去挂载系统盘。当然,如果想给系统加一个硬盘却又不想重装系统,就可以在/etc/fstab文件中添加硬盘的信息原创 2020-12-10 21:05:36 · 447 阅读 · 0 评论 -
Linux中的HOME目录和home目录???
Linux中的HOME目录和home目录???在Linux标准文件系统中,/目录是整个文件系统的根目录,其他所有的目录都要依附于根目录而存在,其中就包括常说的家目录。那所谓的家目录在哪呢?aaa@bbb:/$ lsbin boot dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin srv swapfile sys tmp usr var可以看到原创 2020-12-10 19:36:04 · 20397 阅读 · 2 评论 -
man手册第一行中的数字代表的含义
man手册第一行中的数字代表的含义1 表示用户在shell环境下可以操作的命令或可执行文件2 表示系统内核可调用的函数和工具3 一些常用的函数与函数库4 设备文件的说明,通常是/dev下的设备5 配置文件或某些文件的格式6 游戏7 惯例与协议,例如Linux文件系统,网络协议等8 系统管理员可用的命令9 跟kernel有关的文件o 旧文件n 新文件l 本地文档...原创 2020-12-10 15:40:24 · 430 阅读 · 0 评论 -
Linux中的七种文件类型
Linux中的七种文件类型-普通文件包括文本文件、编译好的二进制文件、特殊格式的数据文件。d目录文件目录也是文件,允许以操作文件的方式来操作目录。l链接文件在Linux系统中链接文件分为硬链接和软连接两种,其中硬链接是指通过索引节点来进行链接,在系统中多个文件各指向同一个索引节点,这种方式可以防止误删重要数据;而软链接也称为符号链接,实际上是一个存储着指向源文件链接的位置信息的文本文件。举一个例子,当源文件删除后,用户通过软链接将无法查看文件的内容,但是通过硬链接文件还可以原创 2020-12-10 10:53:23 · 894 阅读 · 0 评论 -
GitHub 访问优化
GitHub 访问优化点击进入网站:站外连接记录主页显示的 IP 地址,作为 IP1,然后在主页上方搜索github.com找到第二个 IP 地址,作为 IP2。使用命令sudo vim /etc/hosts打开hosts文件,并在最后加入以下信息:第一个IP github.global.ssl.fastly.net 第二个IP github.com然后保存并退出。...原创 2020-12-05 09:47:03 · 193 阅读 · 0 评论 -
解决SSH连接超时
解决SSH连接超时使用命令sudo vim /etc/ssh/sshd_config打开sshd的配置文件,修改以下命令(若配置文件中没有,手动添加下述两行即可):ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接...原创 2020-12-05 09:33:30 · 1043 阅读 · 0 评论 -
Linux环境下使用fcntl实现C语言非阻塞输入
Linux环境下使用fcntl实现C语言非阻塞输入在使用C语言编程时,常常会用到scanf()、getchar()等函数来获取键盘的输入,当键盘没有输入时程序会发生阻塞并一直保持在阻塞状态,此时如果想要继续执行下一步的程序,就需要将IO状态置为非阻塞,以确保无用户输入的情况下程序的正常执行。fcntl是Linux中的函数,用来改变已打开文件的性质,其定义为int fcntl(int fd, int cmd);,其中参数fd表示欲设置的文件描述符,参数cmd代表将要执行的操作,如果该操作需要键入参数,fc原创 2020-08-02 17:54:48 · 1917 阅读 · 1 评论 -
Linux环境下静态库和动态库(共享库)的创建及使用
Linux环境下静态库和动态库(共享库)的创建及使用编写程序时,常常将重复代码写进函数,通过多次调用函数来减少工作量,类似的,当一个工作需要多次调用某些函数和变量时,可以将这些函数、变量封装成库,供其他程序调用,提高开发效率。C语言中有两种库类型,分别为静态库和动态库(共享库)。静态库静态库是在目标文件链接成可执行文件过程中,直接将代码载入可执行文件,后期程序的运行不再需要静态库。在Linux系统中,静态库的后缀为.a,静态库的生成分为两步,第一步将源文件编译生成目标文件,第二步通过目标文件生成静态库原创 2020-08-02 16:37:12 · 1159 阅读 · 0 评论 -
使用gedit时报错failed to commit changes to dconf: The connection is closed
使用gedit时报错failed to commit changes to dconf: The connection is closed错误场景:使用 gedit test.c命令编辑test.c文档时出现该错误,但是文档可以正常打开。解决方案:之前没有遇到过这种情况,以为是gedit程序配置文件加载失败导致的,就直接重启虚拟机,然后打开文件时依然会出现这个错误,此时是在 root 用户下,考虑到可能是权限问题导致的错误,切换到普通用户目录下,并重启了虚拟机,再次使用时就不会报错了。错误信息如下:原创 2020-07-16 19:57:09 · 9853 阅读 · 7 评论 -
unable to create directory ‘/run/user/0/dconf‘: Permission denied. dconf will not work properly.
使用gedit时报错failed to commit changes to dconf: The connection is closed错误场景:使用 gedit test.c命令编辑test.c文档时出现该错误,但是文档可以正常打开。解决方案:之前没有遇到过这种情况,以为是gedit程序配置文件加载失败导致的,就直接重启虚拟机,然后打开文件时依然会出现这个错误,此时是在 root 用户下,考虑到可能是权限问题导致的错误,切换到普通用户目录下,并重启了虚拟机,再次使用时就不会报错了。错误信息如下:原创 2020-07-16 19:55:18 · 6371 阅读 · 1 评论 -
Linux基础命令练习
Linux基础命令练习1、 在home下创建一个以自己名字首字母开始的文件夹root@ubuntu:/home# mkdir Gsangroot@ubuntu:/home# lsGsang ubuntu# 要切换到root2、进入此文件夹ubuntu@ubuntu:/home$ cd Gsang/ubuntu@ubuntu:/home/Gsang$ 3、在该文件夹下直接创建 AAA/BBB 文件夹root@ubuntu:/home/Gsang# mkdir -p AAA/BBBr原创 2020-07-13 23:16:00 · 3310 阅读 · 0 评论 -
Linux系统的应用领域
Linux系统的应用领域Linux 系统是一款开源的类 Unix 操作系统,就像常见的 Windows,Mac OS,MS-DOS,Solaris 等其他操作系统一样,是计算机/服务器硬件与其上运行的程序之间的接口。由于 Linux 系统具有开源、网络功能强大、工具链完整等优点,被广泛用于各个领域。参考网上一些文章,总结出 Linux 在以下领域中有着广泛的应用:嵌入式操作系统嵌入式 Linux 是将 Linux 操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。其代码开源、内核小原创 2020-07-09 18:17:26 · 1192 阅读 · 0 评论 -
Linux安装VScode步骤
Linux安装VScode步骤VScode 是 Linux 上一个流行的图形化编程工具。通过code -v可以查看是否已安装该编辑器。打开 Ubuntu 中的 software 搜索原创 2020-06-28 15:52:04 · 2164 阅读 · 0 评论 -
快速上手Linux系统
Linux基础操作Linux系统下一切皆文件打开Ubuntu的Terminal,会看到以下信息ubuntu@ubuntu:~$ 其中第一个ubuntu代表当前用户名,第二个ubuntu是指出当前操作系统,:解释,~代表当前处于用户工作目录,$表示普通用户身份。在Linux系统中会有一个最基本的帮助手册man,通过man指令可以查看指定命令的使用说明,例如ubuntu@ubuntu:~$ man man通过help命令同样可以查看命令的使用帮助,只不过help命令只能用于shell内置命令,原创 2020-06-28 13:07:06 · 209 阅读 · 0 评论