最全的Linux教程,Linux从入门到精通
======================
-
linux从入门到精通(第2版)
-
Linux系统移植
-
Linux驱动开发入门与实战
-
LINUX 系统移植 第2版
-
Linux开源网络全栈详解 从DPDK到OpenFlow
第一份《Linux从入门到精通》466页
====================
内容简介
====
本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
1.数据传输:一个进程需要把他的数据传给另外一个进程。
2.资源共享:多个进程之间共享同样的资源。
3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
2.进程间通信发展
最早的进程间通信方式是使用操作系统提供的共享内存和消息队列机制。共享内存允许多个进程将同一段内存映射到它们自己的地址空间,从而实现数据共享;消息队列则允许进程通过发送和接收消息来进行通信。
随着网络技术的发展,进程间通信也逐渐向网络通信发展。网络通信使得不同计算机上的进程能够进行跨机器的通信和协作。常见的网络通信方式包括套接字(socket)、远程过程调用(RPC)和消息传递接口(MPI)等。
近年来,随着多核处理器和分布式计算的普及,进程间通信的需求也越来越高。为了提高通信效率和方便编程,各种新的进程间通信技术应运而生。例如,管道(Pipe)和FIFO允许两个相关进程之间进行通信;信号量(Semaphore)和互斥锁(Mutex)等同步机制可以确保多个进程之间的正确协作;套接字和远程过程调用等技术允许分布在不同计算机上的进程进行通信。
3.进程间通信分类
管道
1.匿名管道pipe
2.命名管道
System V IPC
1.System V 消息队列
2.System V 共享内存
3.System V 信号量
POSIX IPC
1.消息列队
2.共享内存
3.信号量
4.互斥量
5.条件变量
6.读写锁
二、管道
1.管道简介
在Linux中,管道(pipeline)是一种机制,用于将一个命令的输出作为另一个命令的输入。通过使用管道,可以将多个命令组合在一起,以便实现更复杂的操作。
在命令行中,使用竖线符号( | )来表示管道。
2.匿名管道
#include <unistd.h>
功能:创建一无名管道
原型
int pipe(int fd[2]);
参数
fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:成功返回0,失败返回错误代码
实例代码:
从键盘读取数据,写入管道,读取管道,写到屏幕
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main( void )
{
int fds[2];
char buf[100];
int len;
if ( pipe(fds) == -1 )
perror("make pipe"),exit(1);
// read from stdin
while ( fgets(buf, 100, stdin) )
{
len = strlen(buf);
// write into pipe
if ( write(fds[1], buf, len) != len )
{
perror("write to pipe");
break;
}
memset(buf, 0x00, sizeof(buf));
// read from pipe
if ( (len=read(fds[0], buf, 100)) == -1 )
{
perror("read from pipe");
break;
}
// write to stdout
if ( write(1, buf, len) != len )
{
perror("write to stdout");
break;
}
}
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!