Linux
文章平均质量分 77
Korey_sparks
菜鸟
展开
-
file结构体中的重要字段
struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。 下面说一下file原创 2016-08-27 21:45:33 · 604 阅读 · 0 评论 -
Linux基本命令之find命令
find命令是Linux下一个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征的文件。 find命令的格式:find [-path……] -options [-print -exec -ok] path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录 print:表示将结果输出到标准输出。 ex原创 2016-08-23 23:15:31 · 1035 阅读 · 0 评论 -
Linux进程管理
在linux中每一个进程都由task_struct数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段。当我们调用fork() 时, 系统会为我们产生一个task_struct 结构。然后从父进程,那里继承一些数据, 并把新的进程插入到进程树(一般采用红黑树)中, 以待进行进程管理。tsak_struct的结构比较复杂,大致结构如下图:每个进程都原创 2016-08-25 22:39:07 · 310 阅读 · 0 评论 -
Linux进程创建之fork()v与fork()
在Linux下创建进程有多种方法: 1、fork()#include<unistd.h>pid_t fork(void)//成功返回0,失败返回-1fork()函数是Unix中派生新进程的唯一方法,但在Linux下不是。调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,代表当原创 2016-08-28 00:23:51 · 513 阅读 · 0 评论 -
Linux下的进程间通信之管道
在Linux下,每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到所以进 程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication). 1、管道(pipe) 管道是一种最基本的IPC机制,由原创 2016-09-06 15:51:22 · 414 阅读 · 0 评论 -
Linux的粘滞位
粘滞位(Stickybit),或粘着位,是Linux文件系统权限的一个标志位。普通文件的sticky位会被linux内核忽 略,但目录的sticky位表示这个目录里的文件只能被owner和root删除。 最常见的用法,在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。原创 2016-08-26 20:39:00 · 428 阅读 · 0 评论 -
线程安全与可重入函数
首先,什么是线程安全?什么又是线程不安全呢? 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。 线程安全问题都是由全局变量及静态变量引起的。若每原创 2016-09-08 16:35:19 · 384 阅读 · 0 评论 -
Linux下进程间通信之信号量
信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要原创 2016-09-08 17:16:30 · 504 阅读 · 0 评论 -
Linux下进程间通信之消息队列
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。我们可以通过发送消息来避免命名管道的同步和阻塞问题。消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是入先出。消息队列与命名管道有一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上原创 2016-09-07 00:05:30 · 388 阅读 · 0 评论 -
互斥锁与条件变量
互斥操作: 对共享资源的访问, 要对互斥量进行加锁, 如果互斥量已经上了锁, 调用线程会阻塞, 直到互斥量被解锁. 在完成了对共享资源的访问后, 要对互斥量进行解锁。 死锁主要发生在有多个依赖锁存在时, 会在一个线程试图以与另一个线程相反顺序锁住互斥量时发生. 如何避免死锁是使用互斥量应该格外注意的东西。 总体来讲, 有几个不成文的基本原则: 对共享资源操作前一定要获得锁原创 2016-09-16 23:05:50 · 531 阅读 · 0 评论 -
串行与并行
串行与并行程序或程序段在系统中有两种执行方式。一种是顺序执行,一种是并发执行。但是很多时候我们写的是串行的程序,而操作系统确实又要并发执行程序,这往往会产生一些让程序员感到“很奇怪”的错误。本文就LINUX下和WINDOWS下的并发问题进行了讨论,从例子中可以看到操作系统确实是在并发执行程序。 1、 问题提出: 很多人在调试程序的时候发现,单独运行一个程序实体时能够得到正确的结果,当同时运行两个原创 2016-09-16 21:18:45 · 4597 阅读 · 0 评论 -
Linux下进程间通信之命名管道
管道实现通信的方式简单易懂,但一个不足之处就是管道没有名字,因此,只能用于具有亲缘关系的进程间通信,在命名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存储于文件系统中。命名管道是一个设备⽂文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信。值得注意的是,FI原创 2016-09-06 17:10:08 · 416 阅读 · 0 评论 -
Linux中crond服务与crontab用法
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 Linux下的任务调度分为两类,系统任务调度和用户任务调度。 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到原创 2016-09-09 23:34:39 · 363 阅读 · 0 评论 -
Linux下进程间通信之共享内存
共享内存是进程间通信的一种方式,顾名思义,共享内存就是两个或多个进程共享一块内存。 共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。 但要特别注意的原创 2016-09-08 23:25:36 · 461 阅读 · 0 评论 -
Linux下的守护进程与创建方法
1、我们先来了解一下什么是守护进程? 守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。2、守护进程的特点: (1)Linux系统启动时会启动很多系统服务进程,守护进程没有控制终端,不能原创 2016-09-10 17:50:13 · 471 阅读 · 0 评论 -
Linux下的死锁及产生条件
死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。原创 2016-09-10 23:19:42 · 662 阅读 · 0 评论 -
Linux下文件的三种时间标记
在Window环境下的文件有三种时间,即创建时间、修改时间和访问时间,在Linux下文件也有三种时间,为修改时间,访问时间和状态改动时间。 这两种环境下的文件时间有所不同,Linux环境下没有文件创建时间这个概念,如果文件没有被修改过,那么文件的创建时间和修改时间就相同,如果文件状态没有被修改过,也没有被读取过,那么文件创建时间也等于访问时间和状态改动时间。 由于不能判断文件是否被访问原创 2016-08-21 23:34:03 · 1256 阅读 · 0 评论 -
在Linux下进入目录,目录下创建、修改、删除文件所需权限
首先,我们用root权限建立一个目录名为dir, 此时文件拥有者对改目录具有读、写和执行权限,所属组和other对改目录具有读和执行权限。现在去除dir的所以权限, 此时dir目录的所有权限都不存在,但root用户依然可以进入目录,以及可以在dir目录下创建、修改和删除文件。但普通用户则不可以。 进入超级用户模式,我们给dir的other赋予读权限,再切换为普通用户,发现依然无法进原创 2016-09-01 00:35:20 · 4310 阅读 · 0 评论 -
前台进程和后台进程
操作系统中,前台进程和后台进程有什么区别?特征是什么?后台程序基本上不和用户交互,优先级别稍微低一点 前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择原创 2016-09-16 21:13:42 · 1682 阅读 · 0 评论 -
网络编程sys/socket.h
include define PF_UNIX PF_LOCAL /* POSIX name for PF_LOCAL. */define PF_INET 2 /* IP protocol family. */_type常见取值为: SOCK_STREAM SOCK_DGRAMeg: int listenfd; listenfd = socket(PF_INET, SOC...转载 2018-04-30 22:15:57 · 8310 阅读 · 0 评论