Linux
文章平均质量分 62
牧童遥指杏花村丫
这个作者很懒,什么都没留下…
展开
-
Linux基本目录的含义、关于目录的命令及文件类型
一、目录的含义/bin:命令、二进制可执行程序/boot:内核、与启动有关的软件/dev:设备文件/etc:系统的配置文件/home:所有普通用户的家目录/lib:系统存放库文件的地方/mnt:临时挂载点/proc:虚拟的目录,里面存放的是进程的属性信息/root:管理员的家目录/selinux:与安全有关的文件/usr:用户自己安装的文件/var:原创 2017-09-29 21:11:01 · 324 阅读 · 0 评论 -
Linux中进程间通信之管道
进程间通信:管道管道:1、有名管道 2、无名管道为什么要引入管道呢?答:因为普通文件存储在磁盘中,读写效率低 管道文件存储在内存中,读写效率高1、有名管道(1)创建:mkfifo fifo(2)open时需要两个进程(r读、w写)一起操作(3)有名管道可以在任意两个进程间使用(4)管道有读端和写原创 2017-11-20 09:33:09 · 316 阅读 · 0 评论 -
Linux中gdb调试的一些简单命令
Linux中JDB调试的一些简单命令调试:需要的工具:gdb 具有调试信息,才能调试,编译时加上 -g参数,是程序具有调试信息。开始调试:gdb main main是要调试的程序,由gccmain.c -g -omain生成。进入后提示符变为(gdb) 。1、(gdb) l:显示代码,如果没有全部显示就继续按回车。 代码会进行行号提示。2、(gdb) b行号...原创 2017-10-21 16:14:10 · 498 阅读 · 0 评论 -
Linux中利用子进程实现多个客户端和服务器端通信
我在前面一篇博客中已经讲过了客户端和服务器端通信的流程和所需要用到的系统调用那么,这篇博客我就利用子进程实现多个客户端和服务器端通信代码实现:ser.c#include #include #include #include #include #include #include #include int main(){ int sockfd =原创 2017-12-11 11:21:16 · 919 阅读 · 0 评论 -
Linux中利用线程实现多个客户端和服务器端进行通信
上一篇博文讲了如何利用子进程实现多个客户端和服务器端进行通信,那么,这一篇博客就来实现一下如何利用线程实现多个客户端和服务器端进行通信代码实现:ser1.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#inc...原创 2017-12-11 11:27:29 · 3686 阅读 · 1 评论 -
Linux中进程间通信——信号量机制
信号量一、信号量的定义引入信号量:为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。 1、信号原创 2017-11-24 14:04:27 · 1260 阅读 · 0 评论 -
Linux中进程间通信——共享内存
Linux中进程间通信——共享内存 一、共享内存的定义顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进原创 2017-11-24 17:00:28 · 259 阅读 · 0 评论 -
Linux中进程间通信——消息队列
Linux中进程间通信——消息队列 一、消息队列概念消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最原创 2017-11-25 10:23:55 · 339 阅读 · 0 评论 -
Linux进程间通信——流式套接字
Linux中进程间通信——流式套接字我前面几篇博客中说到的进程间的通信,通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程,这一篇我是写的是在同一台计算机上两个进程通信。 一、socket的含义soc原创 2017-12-06 17:47:07 · 842 阅读 · 0 评论 -
Linux中I/O复用——select函数详解及代码实现
Linux中I/O复用——select函数详解及代码实现一、I/O复用1、I/O复用概念: 解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。2、I/O复用使用的场合:(1)当客户处理多个描述符(通常是交互式输入、网络套接字)时,必须使用I/O复用。(2)tcp服务器既要处理监听套接字,又要处理已连接套接原创 2018-01-21 22:40:09 · 429 阅读 · 0 评论 -
Linux中fork系统调用的源码剖析
Linux中fork系统i调用的源码剖析首先 先给大家看一张图 系统的看一下大概的fork的主要流程上述图片中 最后eax寄存器置0 这个就是最后为什么子进程的返回值是0的理由下面 就来浅谈一下 fork源码long do_fork(unsigned long clone_flags, unsigned lo原创 2018-01-30 19:46:37 · 568 阅读 · 1 评论 -
Linux中I/O复用——epoll函数详解及代码实现
Linux中I/O复用——epoll函数详解及代码实现一、为什么是epoll在前面用select函数有效的解决了多个I/O端口的复用问题,但是select函数存在两个缺陷:一是进程所能同时打开的文件描述符个数受FD_SETSIZE大小的限制;二是每个select函数返回可用的文件描述符集合后,应用都必须对所有已注册的文件描述符进行遍历对比,以确定哪个描述符上发生了事件,从而原创 2018-01-22 17:02:17 · 464 阅读 · 0 评论 -
Linux中select 、poll、epoll三者I/O复用的比较
前面我们讨论了select、poll、epoll三组I/O复用系统调用,这三个系统调用都可以同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值就是就绪文件描述符的数量,返回0表示没有事件发生。1、select系统调用select的参数类型fd_set没有将文件描述符和事件绑定,它仅仅是一个文件描述符集合,因此selec原创 2018-02-01 12:53:06 · 319 阅读 · 0 评论 -
Linux中I/O复用——poll函数详解及代码实现
Linux中I/O复用——poll函数一、poll函数select() 和 poll() 系统调用的本质一样,poll() 与 select() 类似,与 select() 在本质上没有多大差别,管理多个文件描述符也是进行时间轮询,根据描述符的状态进行处理,但是 poll()没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。poll() 和 select() 同样存在一个缺点就是,包含原创 2018-01-18 15:39:44 · 491 阅读 · 0 评论 -
模拟shell实现su命令(切换用户)
在这里给大家推荐一本书《Linux程序设计 第4版》本篇博文和上篇博文实现mybash所用的到的函数一样1、uid_t getuid(void)函数取得执行目前进程有效的用户识别码。有效的用户识别码用来决定进程执行的权限,改变此值,进程可以获得额外的权限。2、struct passwd *getpwuid(uid_t uid)函数通过用户的uid查找用户的passwd数原创 2017-11-19 21:04:52 · 3134 阅读 · 0 评论 -
Linux中模拟shell实现mybash
mybash: 通常shell中执行命令的流程都是bash进程创建了一个子进程,然后子进程进程替换,替换为可执行的命令文件。bash输出信息的格式是: [用户名@主机名所在文件]$(root用户:[用户名@主机名所在文件]#)。原创 2017-11-19 20:53:05 · 1411 阅读 · 0 评论 -
Linux中模拟shell实现ls命令(不加参数)
ls命令:显示当前目录下有哪些文件代码实现:#include #include #include #include #include #include int main(){ char path[256] = {0}; getcwd(path,256); DIR *p = opendir(path); if(p == NULL) { perror("原创 2017-11-19 20:29:41 · 1109 阅读 · 0 评论 -
Linux中文件的权限及文本编辑
一、文件的权限r:读 4w:写 2x:执行 1-:无 0rw- rw- r--chmod:1、文字设定法:chmod原创 2017-10-11 17:46:12 · 704 阅读 · 0 评论 -
Linux中对进程的操作
对进程的一些操作进程:正在运行中的程序进程的状态:就绪、运行、阻塞1、ps:显示当前终端中运行的进程 ps -e:显示所有进程 ps -f:显示进程的详细信息 ps -ef:显示所有进程的详细信息2、kill PID(进程编号):结束一个进程 kill原创 2017-10-11 19:01:02 · 259 阅读 · 0 评论 -
Linux中关于fork()复制进程
fork()复制进程1、fork()的基本概念一个现有进程可以用fork()函数通过系统调用创建一个新进程,该函数定义如下:#include pid_t fork(void);// 返回:若成功则在子进程中返回0,在父进程中返回子进程PID,若出错则返回-1因此,可以通过返回值知道当前进程是父进程还是子进程。2、fork调用的一个奇妙之处就是它仅仅被调用一次,却原创 2017-10-29 08:27:50 · 709 阅读 · 0 评论 -
Linux中静态库和共享库的制作方法
Linux中静态库和共享库的做法 1、什么是库:预先编译好的函数(方法)的集合。2、静态库:libxxx.a xxx:代表库的名字3、共享库:libxxx.so4、一些文件所在的位置:程序、命令:/usr/bin /bin头文件:/usr/include库文件:/usr/lib /lib 静态库的做法:1、命令:ar crv libxxx.原创 2017-10-21 16:35:21 · 328 阅读 · 0 评论 -
Linux中僵死进程
僵死进程(僵尸进程) 一、僵死进程产生的原因 用fork创建进程,子进程终止时,它与父进程之间还会保持联系,知道父进程也正常终止或者父进程调用wait才结束,所以进程表中子进程的表项不会立即释放,因为它的退出码还需要保存起来,以备父进程wait调用的时候使用。子进程先于父进程结束,父进程没有获取子进程的退出码。实验:实验解析: 如原创 2017-11-07 11:32:46 · 345 阅读 · 0 评论 -
Linux中的命令
1、grep:在一个字符集合中找到符合条件的行输出,也就是可以起到一个过滤的作用。用法:grep“root” password在passwd文件中查找root grep hello file在file文件中查找hello2、find:在系统中查找一个文件用法:find路径 -name 文件名 find /home -name file原创 2017-10-14 19:44:41 · 186 阅读 · 0 评论 -
Linux中open、write、read、close系统调用
个人学习整理 如有不足之处 请不吝指教open系统调用open函数的三个参数:(1)path是已经存在的文件的路径;(2)oflags参数:若值为 O_RDONLY ,就以只读方式打开文件; 若值为 O_WDONLY,就以只写方式打开文件; 若值为 O_RDWR,就以读写方式打开文件;(3)原创 2017-11-01 11:27:41 · 19094 阅读 · 0 评论 -
main函数的三个参数
main函数的三个参数每一个C程序都有一个main()函数。在Linux系统上:#include#include#include#include#includeint main(int argc,char* argv[],char* envp[]) { int i = 0; printf("argc=%d\n",argc); for(;i原创 2017-10-24 10:51:16 · 597 阅读 · 0 评论 -
Linux中静态库和共享库的区别
Linux中静态库和共享库的区别 在上一篇博客中写到了在Linux中静态库和共享库的做法,那么这篇博文就来给大家简单分享一下静态库和共享库的区别。 1、静态库 (1)如果主机上没有libfoo.a,那么main程序能不能执行? 答:可以执行。因为main程序中已经有add方法(函数)了。(2)如果libfoo.原创 2017-10-24 10:43:01 · 853 阅读 · 0 评论 -
gcc中预编译(预处理)、编译、汇编、链接
gcc中预编译、编译、汇编、链接 一、预编译操作步骤:gcc -E test.c -o test.i作用:处理关于 “#” 的指令(1)删除#define,展开所有宏定义。例#define portnumber 3333(2)处理条件预编译 #if, #ifdef, #if, #elif,#endif(3)处理“#include”预编译指令,将包含的“.h”文件插入对应原创 2017-10-21 17:23:09 · 841 阅读 · 0 评论 -
系统运行级别
运行级别 1、runlevel:查看运行级别2、/etc/inittab:运行级别所存储的文件路径3、运行级别:0 halt:关机 1:单用户模式 2:多用户、无网络服务 3:完全的多用户、在字符界面 4:未定义、自定义 5:图形化界面原创 2017-10-17 10:34:28 · 353 阅读 · 0 评论 -
替换进程execl系列
一、exec替换进程当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。例如:在shell命令行执行ps命令,实际上是shell进程调用fork复制一个新的子进程,在利用exec系统调用将新产生的子进程完全替换成ps进程。二、exec系列函数(execl、execlp、execle、execv、ex原创 2017-11-04 19:11:34 · 610 阅读 · 0 评论 -
Linux中模拟shell实现mkdir命令
mkdir:创建一个目录(文件夹)代码实现:#include #include #include #include #include #include int main(int argc,char *argv[]) { if(argc != 2) { printf("mkdir:argc error\n"); exit(0); } if(mkdi原创 2017-11-14 11:28:45 · 1702 阅读 · 0 评论