
Linux
文章平均质量分 61
linux平台开发
WYSCODER
一只努力学编程的菜鸟
展开
-
Linux 进程间通信之管道
文章目录Linux 进程间通信之管道1.什么是管道2.有名管道2.1有名管道的创建2.2 创建一个进程 a 要将从键盘获取的数据循环传递给另一个进程 b3.无名管道4.管道的特点Linux 进程间通信之管道1.什么是管道管道可以用来在两个进程之间传递数据,其实我们已经用过管道了,比如 ps -ef | grep bash ,| 就是个管道,其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行过滤。管道文件的读写是在内存上进行的。管道文件有一个读端还有一个写端,如原创 2021-11-14 09:44:57 · 436 阅读 · 0 评论 -
Linux 信号的使用
文章目录信号的使用1.信号的基本概念图示信号发送和处理常见的信号信号的值在系统源码中的定义2.修改信号的响应方式signal()signal()信号的三种响应方式在键盘上按下 Ctrl+c 时,会给当前终端前台执行的进程发送 SIGINT 信号,用 signal 修改 SIGINT 信号的响应方式信号的使用1.信号的基本概念信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的系统调用在“signal.h”头文件中有声明。图示信号发送和处理常见的信号信号的值在系统源原创 2021-11-12 17:42:57 · 1799 阅读 · 0 评论 -
Linux 写一个自己的bash版本3.0(收官)
写一个自己的bash3.0版本(收官)文章目录写一个自己的bash3.0版本(收官)1、问题描述2、重写替换进程代码段3、完整代码4、结束语1、问题描述我们已经完成了写一个自己的bash1.0版本、写一个自己bash2.0版本在2.0版本中我们改善了1.0版本,让程序打印命令提示符的时候可以自动获取用户名,主机名,当前位置和自动判断当前是管理员用户#还是普通用户$和自己实现了内置命令cd,但是仍有一些缺陷,当启动mybash可执行程序,输入ps,ls,pwd等命令时,mybash是fork一个子进程,原创 2021-11-07 10:42:21 · 279 阅读 · 0 评论 -
Linux自己实现pwd和ls命令
自己实现pwd和ls命令文章目录自己实现pwd和ls命令1.pwd命令1.1编写pwd.c1.2编译运行2.ls命令2.1opendir函数2.2readdir2.3closedir 函数2.4 编写ls.c2.5编译运行2.6改进ls.c2.7重新编译运行在我们的mybash版本1.0和mybash版本2.0中,通过执行程序fork一个子进程,然后再替换子进程实现了/usr/bin/目录下的命令操作,详情请看写一个自己的bash1.0版本,写一个自己的bash2.0版本,execvp会自动在路径下寻找原创 2021-11-06 20:53:18 · 531 阅读 · 0 评论 -
Linux 写一个自己的bash2.0版本
写一个自己的bash2.0版本在上一次我们写了一个mybash程序,生成了一个自己的简单的bash。通过执行mybash可执行程序,调用命令,如ps,ls等。原理是mybash调用fork()产生一个子进程然后再替换该子进程,详细请见上一篇博客写一个自己的bash1.0版本但是仍有一些缺陷,比如,1、我们的命令提示符是写死的,是通过printf()函数直接打印出来的printf(“wys@DESKTOP-2OU3HRV:~$”);那么现在来回顾一下Linux终端的命令提示符各部分的含义明白了各部分含义原创 2021-11-06 17:18:09 · 338 阅读 · 0 评论 -
Linux 写一个自己的bash1.0版本
Linux 写一个自己的bash1、什么是bash?bash是 Bourne Again Shell 的缩写,是linux默认的标准shell(也是大家常说的系统内核),bash也是Unix/Linux上常见的Shell脚本解释器,既然bash是标准的shell,那么就有非标准的sh,csh,ksh等等,我们常说有多少种Shell,其实说的是Shell脚本解释器,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,bash是基于Bourne shell创建的,并且吸收了C shell和Korn原创 2021-11-04 23:29:16 · 489 阅读 · 2 评论 -
Linux 进程替换
进程替换1、exec 系列替换过程:只替换进程实体,pcb不变exec 系类方法:int execl(const char path, const char * arg,…);int execlp(const char* file, const char * arg,…);int execle(const char* path, const char * arg,…,char* const envp[]);int execv(const char * path, char* const argv原创 2021-11-03 21:17:27 · 277 阅读 · 2 评论 -
Linux操作文件的系统调用
操作文件的系统调用1、文件操作有关的系统调用open()read()write()close()1)open()int open(const char* pathname, int flags);//用于打开一个已存在的文件int open(const char* pathname, int flags,mode_t mode);//用于新建一个文件,并设置访问权限参数介绍:pathname:将要打开的文件路径和名称flags : 打开标志,如 O_WRONLY 只写打开O_RDO原创 2021-11-01 23:32:22 · 1641 阅读 · 0 评论 -
Linux系统文件类型和文件权限
Linux系统文件类型和文件权限1、文件类型Linux 下所有的东西都可以看做文件, Linux 将文件分为以下几种类型:◼ 普通文件 ‘ -’◼ 目录文件 ‘ d’◼ 管道文件 ‘ p’◼ 链接文件 ‘ l’◼ 设备文件(块设备 ’ b’ 、字符设备 ‘ c’ )◼ 套接字文件 ‘s’Linux 上不以文件的扩展名区别文件类型,而是在文件属性中有一列专门记录文件类型,如下图所示。文件信息:2、文件权限◼ r 读权限 值: 4◼ w 写权限 值: 2◼ x 执行权限 值: 1原创 2021-10-31 10:23:59 · 494 阅读 · 0 评论 -
Linux 僵尸进程
僵尸进程1.什么是僵尸进程一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。当用ps命令观察进程的执行状态时,看到这些进程的状态栏为defunct。如果该进程的父进程先结束,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Ini原创 2021-10-28 18:56:15 · 412 阅读 · 0 评论 -
Linux 进程复制 fork2
进程复制fork1. fork() || fork()编写以下代码,A打印几次? 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main() 5 { 6 fork() || fork(); 7 printf("A\n"); 8 9 exit(0); 10 }图解:运行结果:wys@DESKTOP-2OU3HR原创 2021-10-27 23:03:56 · 227 阅读 · 0 评论 -
Linux 复制进程fork1
复制进程fork1.fork方法用man命令查看fork方法wys@DESKTOP-2OU3HRV:~/mycode/day08$ man forkpid_t fork(void);函数返回类型 pid_t 实质是 int 类型fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。编写以下程序: 1 #include<stdio.h> 2 #include<st原创 2021-10-27 20:35:15 · 254 阅读 · 0 评论 -
Linux 主函数参数介绍
主函数参数介绍int main( int argc, char argv[], char envp[])(1) argc 参数个数(2) argv 参数内容(3) envp 环境变量**1.编写以下代码,打印参数个数,和参数内容 1 #include<stdio.h> 2 #include<stdlib.h> 3 //参数个数 参数内容 环境变量 4 int main(int argc,char* argv[],char*原创 2021-10-27 19:37:37 · 282 阅读 · 0 评论 -
Linux printf 函数输出问题
printf 函数输出问题printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有以下三种情况满足,才会输出到屏幕。1) 缓冲区满2) 强制刷新缓冲区 fflush3) 程序结束时1.编写以下程序 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 int main() 5 { 6 printf("hello world\n"); 7原创 2021-10-27 17:26:35 · 673 阅读 · 0 评论 -
LInux 系统上的库文件的生成和使用
1、什么是库文件库是一组预先编译好的方法的集合。 Linux 系统存储的库的位置一般在: /lib 和 /usr/lib。在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在/usr/include 下或其子目录下。库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so2、静态库的生成和使用2.1 静态库的生成以下是需要生成静态库的” .c” 文件,其中“foo.h”中是函数的声明,“add.c”和“max.c原创 2021-10-25 21:06:41 · 251 阅读 · 0 评论 -
Linux gdb调试
gdb调试写一个C语言程序,输入一个字符串,当字符串不为“end”时,一直输入,直到输入字符串“end”退出程序1.编写代码wys@DESKTOP-2OU3HRV:~/mycode/day03$ vim test.c 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 while(1) 6 { 7 printf("input\n"); 8 ch原创 2021-10-24 10:48:42 · 1844 阅读 · 0 评论 -
Linux makefile和make
makefile和make管理工程 实现自动化编译 (和 vs 比较)示例:对 main.c add.c max.c 三个文件进行编译(注意: gcc 前面必须是 table 建缩进)1.编写makefile文件wys@DESKTOP-2OU3HRV:~/mycode/day02$ vim makefile 1 all : main 2 3 main: main.o add.o max.o 4 gcc -o main main.o add.o max.o 5 6 m原创 2021-10-23 20:15:22 · 92 阅读 · 0 评论 -
Linux C程序多文件编译
C程序多文件编译在Linux平台C编程,实现求两数最大值和两数之和的功能1.编写add.cwys@DESKTOP-2OU3HRV:~/mycode/day02$ vi add.c 1 int add(int x,int y) 2 { 3 return x + y; 4 } 2.编写头文件add.hwys@DESKTOP-2OU3HRV:~/mycode/day02$ vi add.h 1 int add(int x,int y);3.编写max.c原创 2021-10-23 16:45:54 · 789 阅读 · 0 评论 -
Linux系统上C程序的编译与调试
1.gcc分布编译链接(1) 预编译 :gcc -E main.c -o main.i(2) 编译:gcc -S main.i -o main.s(3) 汇编:gcc -c main.s -o main.o(4) 链接:gcc main.o -o main(1) 预编译 :gcc -E main.c -o main.iwys@DESKTOP-2OU3HRV:~/mycode$ lsmain.cwys@DESKTOP-2OU3HRV:~/mycode$ cat mian.ccat:原创 2021-10-23 11:32:00 · 452 阅读 · 0 评论 -
Linux 进程管理命令
进程管理命令1 ps默认显示与当前终端有关的进程信息-e 显示系统中所有的进程信息-f 显示更多的进程属性信息(全格式)-L 显示进程中的线程 IDwys@DESKTOP-2OU3HRV:~/mycode$ ps -fUID PID PPID C STIME TTY TIME CMDwys 11 10 0 15:55 tty1 00:00:00 -bashwys 97 11 0 19:15 tty1原创 2021-10-22 20:29:40 · 184 阅读 · 0 评论 -
Liunx 基础命令
Liunx 基础命令1.pwd显示当前位置的绝对路径,示例如下:wys@DESKTOP-2OU3HRV:~/mycode$ pwd/home/wys/mycodewys@DESKTOP-2OU3HRV:~/mycode$2.cd切换目录, cd 后的参数表示要切换到的位置, 可以使用绝对路径或相对路径,示例如下:wys@DESKTOP-2OU3HRV:~$ cd /wys@DESKTOP-2OU3HRV:/$ cd homewys@DESKTOP-2OU3HRV:/home$ cd w原创 2021-10-21 11:06:16 · 219 阅读 · 0 评论 -
Linux 文件压缩和解压命令
文件压缩和解压命令1. tar将文件打包或者解包◼ c 创建包文件◼ f 指定目标为文件而不是设备◼ v 显示详细过程◼ t 显示包中的内容而不释放◼ x 释放包中的内容◼ z GNU 版本新加的,使得 tar 有压缩和解压的功能tar打包过程wys@DESKTOP-2OU3HRV:~/mycode$ lsmain.c passwdwys@DESKTOP-2OU3HRV:~/mycode$ tar cvf my.tar main.c passwdmain.cpasswdwys原创 2021-10-20 17:36:25 · 181 阅读 · 0 评论 -
Linux 文件编辑命令-----三种模式
文件编辑命令-----三种模式1.三种模式介绍1.1命令模式1.2插入模式1.3末行模式2.模式切换命令模式切换到插入模式:a //进入到当前光标后开始编辑A //进入到当前光标所在行的行末开始编辑i //进入当前光标位置开始编辑I //进入当前光标所在行的行头开始编辑o //进入当前光标下一行开始编辑O //进入当前光标上一行开始编辑...原创 2021-10-20 16:23:41 · 1156 阅读 · 0 评论