首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【网络编程Linux网络编程基础与实战第二弹——Socket编程

Socket编程 套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。...与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。 区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。...TCP/IP协议最早在BSD UNIX上实现,为TCP/IP协议设计的应用层编程接口称为socket API。...网络编程接口 首先先看一下网络套接字的函数以及具体实现流程图: 网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。...系统上,一般都是当客户端和服务器在同一台及其上的时候使用 type参数(创建时选的协议): SOCK_STREAM 这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。

23720
您找到你想要的搜索结果了吗?
是的
没有找到

linux系统编程(3)

[3]信号 (2)System 5 IPC对象进程间通信方式   [1]消息队列   [2]共享内存   [3]信号灯集 (3)socket通信 (4)Android系统中增加...Binder进程间通信方式 Linux 支持以上所有进程间通信方式 三 管道进程间通信 (1)无名管道 特点: 只能用于具有亲缘关系进程间通信(具有亲缘关系的进程具有数据拷贝动作...返回值: 成功返回0,失败返回-1 (2)管道读写规则  读端存在  ,写管道 ---->只要管道没有满,都可以写入数据到管道 读端不存在,写管道 ---->此时写管道没有意义,操作系统会发送...管道中没有数据,读阻塞 写端不存在,读管道 ---->此时管道中读取数据,管道中没有数据,此时不阻塞,立即返回,返回值0 (3)有名管道 特点:可以用于任意进程间通信,它是一种特殊的文件,在文件系统存在名字...SIGSTOP 不能忽略 捕捉   当进程收到信号,此时执行的信号处理函数  默认   大部分信号对进程的默认操作方式都是杀死进程   子进程状态发生改变的时候,操作系统向父进程发送

1K20

Linux系统进程编程(二)

哈哈哈,听到僵尸两个字是不是有点小害怕,言归正传,在Linux系统中,我们要明白:进程在运行时是需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了...),所以linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有的资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close...但是操作系统只是回收了这个进程工作时消耗的内存和IO,而并没有回收这个进程本身占用的内存(8KB,主要是task_struct和栈内存),因为进程本身的8KB内存操作系统不能回收需要别人来辅助回收,因此我们每个进程都需要一个帮助它收尸的人...同时,linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)的子进程。...\n", getpid()); return 0; } 输出结果: 说明:这里父进程先运行死掉了,但是我们后面并没有发现特殊进程init为1,而是908,这其实是跟ubuntu系统有关系的,真实是为

1.6K10

第二Linux系统基本操作

注:虽然我们安装并登录到了GUI图形界面,但是在Linux操作中大多还是习惯于以命令形式管理控制系统,鼠标操作仅启动辅助作用。 ? ? 登录到基础设施服务器,默认即是字符界面,可登录后使用命令操作。...也有其他方式,但此操作最为直接 useradd zhang ---新建系统用户 passwd zhang ---给指定用户设置密码 ALT+F1 -F6组合键 ---Linux的字符界面...类似的,Linux也有7中不同的运行状态,称为运行级别,用数字0-6表示。...设置关闭系统的时刻,后面加上时间,格式是hh: mm Warning-message 发给用户的警告信息 2.4 vi编辑器 vi编辑器是Linux系统内功能非常强大的编辑工具,本节我们暂时只介绍下最基本的操作方式...但是由于我们更多的会在命令窗口或者字符界面操作,所以vi编辑器是Linux的必备技能之一。

1.7K60

Linux系统编程:基本IO系统调用

文件描述符 表示 宏 0 标准输入(stdin) STDIN_FILENO 1 标准输出(stdout) STDOUT_FINENO 2 标准错误(stderr) STDERR_FILENO 遵循Linux...open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 两个函数均可用来打开文件,第二个函数比第一个多了参数...系统调用write()时,数据从用户空间的缓冲区中拷贝到了内核空间的缓冲区,但并没有立即把数据写入磁盘中,这称为延迟写。延迟写的问题在于,如果在数据真正写入磁盘之前系统崩溃了,则数据可能丢失。...Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。 close()系统调用 程序完成文件的读写后,调用close函数关闭文件描述符与文件之间的连接,使得文件描述符可以被重用。

3K30

Linux系统下进程编程(一)

,记得刚开始学编程的时候,那时候就是从这里开始萌芽的。那么写了这么多函数,为啥要从这里开始“进门”呢,个人理解就是一种规定。...系统里面编程,它也是要准备一些前期工作的:它要有编译链接时的引导代码-------操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题...另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行脚本文件。)来运行)加载器负责将这个程序加载到内存中去执行这个程序。...在我们Linux系统有一些函数可以获得进程号:getpid(获得当前进程的ID)、getppid(获得父进程ID)、getuid(获取当前进程的用户ID,比如root用户或是普通用户)、geteuid(...它一般在Linux启动时开始执行,系统关闭时才结束。

2.4K10

【高级编程Linux read系统调用

比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...对于第二次读请求,如果所读页面不在Cache中,即不在前次预读的group中,则表明文件访问不 是顺序访问,系统继续采用同步预读;如果所读页面在Cache中,则表明前次预读命中,操作系统把预读group...无论第二次读请求是否命中,系统都要更新当前预读group的大小。此外,系 统中定义了一个window,它包括前一次预读的group和本次预读的group。...为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。

5.9K110

Linux系统编程】进程状态

因为这两个状态是操作系统中进程比较核心的两个状态,当然还有一个运行状态它相对比较好理解,我们后面针对具体的Linux操作系统去讲解。...而我们上面了解的内容其实就是基于操作系统这门课程来说的,可以认为它对于所有具体的操作系统都是成立的,可能比较抽象。 而我们下面呢,要针对一款具体的操作系统——Linux来学习一下进程的状态。...看看Linux内核源代码怎么说 一个进程可以有多个状态(在Linux内核里,进程有时候也叫做任务),那首先我们可以来看一下在kernel源代码里关于进程状态的定义: /* * The task state...此时,操作系统路过。 作为系统的管理者,它发现此时系统的内存资源已经非常紧张了,如果再有进程就要挂了,但是此时操作系统却发现你这个进程却不在运行队列里,而是啥也不干在这里等。...所以,为了方便子进程退出后父进程或操作系统获取该进程的退出结果,Linux进程退出时,进程一般不会立即死亡,而是要维持一个Z状态即——僵尸状态。 等这个进程真正被回收了,它的状态就会变成X死亡状态。

15110

第二章·Linux系统入门-历史介绍

,所有的软件程序都必须运行在操作系统之上,但我们大众百姓常用的操作系统是个人的,也就是给个人用的,熟称桌面系统。...,也就是给个人用的,熟称桌面系统。...1)大学英语六级 2)RHCE、RHCA认证 3)计算机工程师认证 4)C语言编程基础 5)JAVA编程基础 6)Python编程基础 7)写代码的逻辑思维能力 8)网络工程师认证:CCNA...点击此处 5.Linux常见发行 我们现在说的Linux其实都是指的是发行(Distribution version),就是使用Linux内核加上各种GNU的库文件、应用程序,构造而成的操作系统。...Linux发行介绍 Redhat 1993年,将Linux的内核进行编译安装相应软件进行发行。  CentOS 社区企业级操作系统,改Redhat,完全开源。

63730

Linux基础第二课——系统架构

以上是内网网段 127.0.0.1 这是本地回环网卡 表示本身 查看网络是否连通 windows Linux 都是通过 ping 先ping网关 再ping 其它 查看ip地址 windows:ipconfig...Linux:ifconfig 系统架构 Linux一切目录从根出发 sudo apt-get install tree 查看当前位于哪个目录下 pwd 防止切换来切换去 不知道位于哪里 cd /...tree -L 1 挂载: . # 系统跟目录 ├── bin #存放常用的命令 ***** ├── boot #系统的启动文件和核心文件都在这个目录 ├── cdrom #光驱 ├──...#媒体 当用户插入移动设备 比如u盘 系统会自动挂载到这里 ├── mnt # mount 挂载的意思 Linux 文件系统类型是ext4 我们想挂载windows NTFS系统类型 就挂载到这里...***** samba ├── opt # 安装 一些装X的软件 比如Oracle Hadoop ├── proc #系统的进程信息 系统的状态信息 ├── root #超级管理员用户的家目录

50030

Linux系统编程Linux基本指令详解(二)

总结一下: mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。...当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。...当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。...即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。...补充说明:uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。

12810

Linux系统开发: 学习Linux下网络编程

第一章 TCP网络编程 1.1 socket创建套接字 #include #include int socket(int domain, int...这等效于调用shutdown两次:第一次调用时用SHUT_RD,第二次调用时用SHUT_WR。...shutdown(tcp_client_fd,SHUT_WR); //TCP半关闭,保证缓冲区内的数据全部写完 直接强制关闭连接示例: int close(int fd); 1.9 查看Linux系统当前的网络连接...第二章 UDP网络编程 2.1 UDP协议创建流程 2.2 数据报收发函数 2.2.1 recvfrom函数 UDP使用recvfrom()函数接收数据,他类似于标准的read(),但是在recvfrom...信号 3.8 获取网络底层缓冲区发送剩余字节数 在网络编程时,发送方调用write(fd)将报文发送的时候实际上只是写入了内核的write buffer。

3.4K21
领券