Linux
盐焗咸鱼
这个作者很懒,什么都没留下…
展开
-
linux启动新进程运行二进制文件
在linux系统中,我们有时需要通过在程序中启动其他二进制文件,使其运行在独立的进程当中。我们可以通过exec函数族来进行新的文件的执行。在这个过程中,我们需要注意僵尸进程的出现。避免僵尸进程可以有多种方法,例如通过信号,或者连续开启2个进程等等。我们此处通过连续创建子进程来规避僵尸进程的问题。通过新进程运行二进制文件#include <stdio.h>#include &...原创 2018-11-18 20:43:59 · 6481 阅读 · 0 评论 -
linux系统编程(二):cp命令编写(creat、write)
1、cp的作用cp命令将一个文件复制到另外一个文件。如果target文件不存在,cp则会创建,如果存在则会复写。2、需要使用的系统调用2.1 创建/重写文件creat:creat告诉内核创建一个名为filename的文件,如果文件不存在,就创建它,如果存在,就清空内容,把长度设为0。 creat 目标 创建/重写一个文件 头文件 #include&l...原创 2019-03-08 11:38:14 · 1008 阅读 · 0 评论 -
linux系统编程(一):who命令编写(open、read、close)
1、who命令的作用通过在terminal调用who命令,我们可以看到现在登录在linux系统的用户。用户登录信息的数据结构定义在/usr/include/utmp.h。wall pts/4 2019-03-07 09:09 (10.165.33.169)shen pts/16 2019-03-05 10:04 (10.165.39.163)li pts...原创 2019-03-08 09:35:15 · 923 阅读 · 0 评论 -
CPU实现原子操作的方法
在学习并发编程时,我们知道,多条指令不被分割操作被成为原子操作。但是,对于CPU是如何保证原子性的呢。1、对于单核CPU对于单核cpu,所有的事件都是串行,执行完第一才会去执行第二个。所以,单核CPU实现原子操作比较简单。在单核CPU中,每个指令都保证是原子的,即中断只会在指令之间发生。Intel x86指令集支持内存操作数的inc操作,将多条指令的操作在一条指令内完成。因为进程的上下...原创 2019-03-14 22:39:18 · 2468 阅读 · 1 评论 -
linux系统编程(五):目录操作(opendir、readdir、closedir、stat)
1、ls的作用ls命令主要用与输出目录相关的信息。包括当前目录包含的文件,文件的模式,所属,大小等等。2、相关系统调用2.1、打开一个目录opendir opendir 目标 根据目录名打开目录 头文件 #include <sys/types.h> #include <dirent.h> 函数原型 DIR *ope...原创 2019-03-13 22:34:26 · 1603 阅读 · 0 评论 -
linux系统编程(四):修改文件读取指针(lseek)
1、用户注销过程用户注销过程总共包括4步:1、打开utmp文件2、在文件中找到你所在终端的登录记录3、对当前记录做修改4、关闭文件但是,对于write或者read系统调用,都只能顺序读取,或者顺序写入,没有办法读出个一个数据,然后再回头修改它。这时,我们需要使用lseek系统调用来改变当前打开文件的指针位置。指针是与文件描述符相关联的,而不是文件关联,所以如果同一个文件...原创 2019-03-08 17:19:39 · 1432 阅读 · 0 评论 -
linux系统编程(三):使用缓冲提高I/O效率
1、频繁的系统调用将降低效率用户进程运行在用户控件,而磁盘只能被内核直接访问。当执行系统调用时,需要在内核中执行代码。系统调用的开销不仅仅是因为数据的传输。当运行内核代码时,CPU需要切换到超级用户模式,需要建立额外的堆栈和内存环境,执行完系统调用时,CPU要切换回用户模式,把堆栈和内存环境还原为原来的用户模式运行状态。这种频繁的用户态和内核态切换将消耗更多的时间。为了提高I/O的效率,我...原创 2019-03-08 16:09:23 · 396 阅读 · 0 评论 -
Linux后台运行命令
&对于一些耗费时间的工作或者命令,我们在命令后面接上 &,使其在终端的后台运行。make >& make.log &上述命令,在后台运行编译指令,并将编译的日志重定向到 make.log 文件中。注意: & 可以使命令后台运行,但是当我们关闭控制台时,进程也会随之杀死。如果希望关闭控制台后,进程依旧运行,需要使用nohup。no...原创 2019-03-02 14:28:53 · 2306 阅读 · 0 评论 -
make命令参数
转自http://wiki.ubuntu.org.cnmake命令的参数意义下面列举了所有GNU make 3.80版的参数定义。其它版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文档。“-b”“-m”这两个参数的作用是忽略和其它版本make的兼容性。“-B”“--always-make”认为所有的目标都需要更新(重编译)。“-C <...原创 2019-02-12 11:44:37 · 2123 阅读 · 0 评论 -
Makefile自动化变量
转自http://wiki.ubuntu.org.cn自动化变量自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完了。这种自动化变量只应出现在规则的命令中。下面是所有的自动化变量及其说明:$@表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。$%仅当目标是函数库文件中,表示规则中...原创 2019-02-12 11:39:07 · 174 阅读 · 0 评论 -
Linux找不到共享库问题解决
链接和运行文件时,总会遇到cant find xxxx.so的错误。我们需要将共享库所在目录加入到系统的扫面目录。1、将共享库复制到系统默认目录系统默认扫描目录为/lib、/usr/lib、/usr/local/lib,这三个目录加入效果都一样,只是因为规范问题所以有多个目录。将xxxx.so文件复制到上述目录,在链接时系统就会自动进行寻找。但是运行时,仍会出现找不到包的问题,这是因为...原创 2018-12-05 17:06:03 · 3404 阅读 · 0 评论 -
通过修改CR0取消内存写保护
在x86_64进行补丁系统的原地址指令更改时,会因为x86的内存保护,使得对原地址的写操作引起内核panic,报oops。可以通过修改CR0寄存器的第16位暂时关闭写保护。1、CR0 CR0 是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。 CR0的第16位是写保护未即WP位(486系列之后),只要将这一位置0就可以禁用写保护,置1...原创 2018-10-14 23:38:48 · 3781 阅读 · 1 评论 -
通过进程名和进程号杀死相应进程
在linux系统中,我们可以通过在/proc目录下查看所有的运行的进程。在/proc的目录下,每个进程对应一个文件夹,并且进程号与文件名相对应。在进程文件夹内有一个status文件,其第一行对应的对应的就是进程名。我们由此可以通过进程名来获取相应的进程号。通过进程名获取进程号#include<dirent.h>#include<stdio.h>#defin...原创 2018-11-18 19:49:56 · 948 阅读 · 1 评论 -
通过进程号查找进程运行的二进制文件目录
在linux系统中,我们可以在/proc目录下,根据相应的进程号的文件夹,我们可以查看进程的相关信息。在目录下又一个exe文件,其指向进程运行的二进制文件的绝对路径。我们通过ls -l命令,可以获取其相应的目录位置,然后通过正则表达式进行路径提取。获取进程运行路径#include<stdio.h>#include <sys/types.h>#include &...原创 2018-11-18 20:16:02 · 1583 阅读 · 0 评论 -
ArchLinux更新遇到错误
问题: 错误:无法提交处理 (有冲突的文件) libbloom: 文件系统中已存在 /usr/lib/libbloom.so.1 发生错误,没有软件包被更新。 Error installing repo packages解决: sudo pacman -Syu --ig...原创 2019-07-30 14:11:55 · 2910 阅读 · 0 评论