![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux系统编程
徐煜清
这个作者很懒,什么都没留下…
展开
-
管道通信
1.管道通信的特点: (1)管道是半双工的,先进先出的,它把一个进程的输出和另一个进程的输入连接在一起 (2)一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据 2.无名管道和有名管道分别适用的进程是什么? 无名管道用于有血缘关系进程之间的通信;有名管道用于运行同一个系统中的任意两个进程间的通信 3.管道 Pipe 原型:int pipe(int fil原创 2017-12-08 18:27:18 · 631 阅读 · 0 评论 -
Linux进程间通信
进程间通信就是不同进程之间传播或交换信息 Linux进程通信的目的: (1)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 (2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 (3)通知事件:一个进程需要向另一个或另一组进程发送消息,通知它(它们)发送了某种事件。 (4)资源共享:多个进程之间共享同样的资源原创 2017-12-07 18:40:27 · 115 阅读 · 0 评论 -
fread 和fwrite
fread()函数的原型是: size_t fread(void *restrict ptr,size_t size,size_t nmemb,FILE * restrict fp); ptr为读入文件数据的内存存储地址,fp指定要读取的文件,nmemb表示数据块的数目,size表示要读取的数据块的大小(以字节为单位)。 fread()返回成功读入的项目数。正常情况下,它与nmemb相等;原创 2017-12-07 15:32:30 · 610 阅读 · 0 评论 -
Linux进程控制编程
进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元。 程序是放到磁盘的可执行文件,进程是指程序执行的实例 1. fork:子进程拷贝父进程的数据段 vfork:子进程与父进程共享数据段 2. fork:父、子进程的执行次序不确定 vfork:子进程先运行,父进程后运行 完成一个写和读原创 2017-12-06 18:19:49 · 206 阅读 · 0 评论 -
Linux下不带缓存的I/O操作
write 往文本写入结构体数据 代码如下: #include #include #include #include #include #include #include struct test { char name[20]; int age; char sex; }; typedef struct test Test; int main() {原创 2017-12-06 18:11:24 · 336 阅读 · 0 评论 -
Linux进程的三态
进程在运行中不断地改变其运行状态,通常,一个运行进程必须具有以下三种基本状态。 1.就绪状态。当进程已分配到除CPU以外所有必要的资源,只要获得处理器便可立即执行,这时的进程状态称为就绪状态。 2.执行状态。当进程已获得处理器,其程序正在处理器上执行,此时的进程状态称为执行状态。 3.阻塞状态。正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可原创 2017-12-05 22:38:49 · 435 阅读 · 0 评论 -
标准库函数
标准库函数 C库函数的文件操作是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxWorks中都是这些函数。 标准I/O提供缓存的目的就是减少调用read和write的次数,它对每个I/O流自动进行缓存管理(标准I/O函数通常调用malloc来分配缓存)。 它提供了三种类型的缓存: 1) 全缓存。当填满标准I/O缓存后才执行I/O操作。磁盘上的文件通常原创 2017-12-05 20:48:03 · 660 阅读 · 0 评论 -
Linux 下系统调用 API 系统命令 内核函数 区别
系统调用是受控的内核入口,借助这一机制,进程可以请求内核以自己的名义去执行某些动作。以应用程序编程接口(API)的形式,内核提供一系列服务供程序访问。这包括创建新进程、执行I/O,以及为进程间通信创建管道等。 1.系统调用是将处理器从用户态切换到核心态,以便CPU访问受到保护的内核内存。 2.系统调用的组成是固定的,每个系统调用都由一个唯一的数字来标识。 3.每个系统调用可辅之以一套参数,对原创 2017-12-05 12:22:23 · 371 阅读 · 0 评论 -
Linux下Inode理解
一、inode是什么? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,原创 2017-12-05 12:36:09 · 586 阅读 · 0 评论 -
多客户端通过服务器接收转发消息
客户端: #include #include #include #include #include #include #include #include #define PORT 8888 struct info { int ToFd; char buf[100]; }; pthread_t tid[2] = {0}; void *Send(void *arg)原创 2017-12-11 20:45:02 · 1365 阅读 · 0 评论 -
socket单客户端与服务器
socket()函数 int socket(int domain, int type, int protocol); socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数原创 2017-12-11 20:40:21 · 207 阅读 · 0 评论 -
Linux线程
Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。因为pthread的库不是Linux系统的库,所以在编译时要加上 -lpthread。例如:gcc filename -lpthread。注意,这里要讲的线程相关操作都是用户空间中的线程的操作。 线程创建:创建线程实际上原创 2017-12-09 19:27:40 · 112 阅读 · 0 评论 -
线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。进程基本上不拥有系统资源,只拥有一点在运行中必要的资源(如程序计数器,一组寄存器和栈),它可与同属一个进程的其他线程共享进程所有的资源。 一个线程包含: 1.一个指向当前被执行指令的指令指针 2.一个栈 3.一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值 4.一个私有的原创 2017-12-08 19:15:35 · 96 阅读 · 0 评论 -
共享内存和信号量(灯)结合
共享内存: 是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容. 创建共享内存,使用shmget int shmget ( key_t key, int size, int shmflg ) key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为原创 2017-12-08 18:56:46 · 951 阅读 · 0 评论 -
消息队列
unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。 消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息 目前主要有两种类型的消息队列: POSIX消息队列以及系统V消息队列,系统V消息队列目原创 2017-12-08 18:43:13 · 128 阅读 · 0 评论 -
Linux进程通信之信号
信号是在软件层次上对中断机制的一种模拟。信号是进程间通信机制唯一的异步通信机制。 信号事件的发送可以有两个来源:硬件来源;软件来源,最常用发送信号的系统函数是kill,raise,alarm,setitimer及sigqueue函数,软件来源还包括一些非法运算等操作。 信号种类: (1)可靠信号与不可靠信号 (2)实时信号与非实时信号 信号处理方式: (1)忽略信号 即对信号不做任原创 2017-12-07 19:24:11 · 118 阅读 · 0 评论