Linux
cookie1215
这个作者很懒,什么都没留下…
展开
-
实现su命令
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <sys/types.h>#include <pwd.h>#include <shadow.h&原创 2018-04-11 17:33:17 · 234 阅读 · 0 评论 -
文件操作
Linux下的文件系统: 根目录/bin /home /root /usr /etc /dev/proc /lib ……/home:所有普通用户的家目录/home/stu:stu的家目录/bin:命令所对应的可执行文件/etc:系统的配置文件/proc:虚拟目录,内存的映射/root:超级管理员,root用户的家目录/dev:所有的接口设备文件/lib:系统使用的...原创 2018-04-11 17:33:35 · 96 阅读 · 0 评论 -
共享内存
共享内存最为高效的进程间通信方式进程直接读写内存,不需要任何数据的拷贝 .为了在多个进程间交换信息,内核专门留出了一块内存区 .由需要访问的进程将其映射到自己私有地址空间 .进程直接读写这一内存区而不需要进行数据的拷贝,提高了效率多个进程共享一段内存,需要依靠某种同步机制,如互斥锁和信号量等共享内存编程步骤:创建共享内存 .函数shmget() .从内存中获得一段共享内存区域所需头文件#...原创 2018-04-11 17:35:38 · 109 阅读 · 0 评论 -
消息队列
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度msgget函数 该函数用来创建和访问一个消息队列。它的原型...原创 2018-04-11 17:35:55 · 116 阅读 · 0 评论 -
线程
线程管理线程的概念:线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main的执行体。进程可以通过线程库创建N条线程,这些新创建的线程称之为函数线程,main函数所代表的线程为主线程。线程在进程内部共享地址空间、打开的文件描述符、全局变量等资源。同时线程也有其私有的数据信息,包括:线程号、寄存器(程序计数器和堆栈指针)、堆栈、信号掩码、优先级、线程私有存储空间。引入线程的原因:...原创 2018-04-11 17:36:12 · 108 阅读 · 0 评论 -
大小端模式
大端字节序(网络字节序):将低位字节存放在内存的高地址端,高位字节存放在内存的低地址端。小端字节序(主机字节序):将低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。举一个例子:如何判断机器字节序?Linux提供了如下四个函数来完成主机字节序和网络字节序之间的转换:#includeunsigned long int htonl(unsigned long int hostlon...原创 2018-04-11 17:36:21 · 215 阅读 · 0 评论 -
socket
socket地址:是一个IP地址和端口对(ip,port),唯一的表示了使用TCP通信的一端。通用socket地址:表示socket地址的结构体:#includestruct sockadddr{ sa_family_t sa_family; char sa_data[14];};sa_family是地址族类型的变量。地址族类型通常与协议族类型相对应。 sa_data成员用于存放socket...原创 2018-04-11 17:36:34 · 189 阅读 · 0 评论 -
TCP协议详解
TCP:面向连接,字节流,和可靠传输使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须要为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。TCP:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系。TCP如图所示:UDP如图所示:TC...原创 2018-04-11 17:36:52 · 240 阅读 · 0 评论 -
静态库和动态库
库文件是预先编译好的方法的集合,一种可执行的二进制代码(但不可独立执行),可以被操作系统载入内存执行。Windows和linux二者的库的二进制是不兼容的。Windows系统静态库的扩展名为.lib,动态库扩展名为.dll。Linux系统静态库的扩展名为.a,动态库的扩展名为.so。Linux中有两种库:静态库和动态库(共享库)。静态库:1. 特点:程序在链接的过程当中,链接器从库文件中取得所需代...原创 2018-04-11 17:37:04 · 129 阅读 · 0 评论 -
高级I/O函数
#includeInt dup(int file_descriptor)dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符file_descriptor指向相同的文件、管道或者网络连接。成功返回的文件描述符总是取系统当前可用的最小整数值。失败返回-1。#includeInt dup2(int file_descriptor_one,int file_descriptor_two)du...原创 2018-04-11 17:37:10 · 98 阅读 · 0 评论 -
服务器客户端通信
服务器端客户端客户端输出服务器输出原创 2018-04-19 17:38:18 · 147 阅读 · 0 评论