根据所在位置可以分为两种文件 Linux系统里面就也存在着大量的文件,毕竟Linux系统里面一切皆文件,如果当前我们不使用ls这个可执行文件,那么ls这个文件就不会加载内存里面。...管理文件 Linux系统里面可以同时存在多个进程,而一个进程又可以打开多个文件,所以Linux系统里面可以存在多个文件。文件这么多,要不要进行管理,那当然是要的。怎么管理?先描述再组织。...1.2 认识文件描述符fd 之前通过open接口讲到,文件描述符就是一个整数。但这个整数为什么为从3开始?...而且也能够看到,stdin、stdout和stderr它们的类型都是文件指针,文件指针类型其实也就是对fd的一种封装,即FILE是一种结构体,它里面有存储fd也就是每个文件对应的文件描述符。...既然是数组,那么就一定有对应的下标,而这些下标也就是fd,即文件描述符的本质是数组下标。
许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。...安装 fd 在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。...另外,你也可以使用 Rust 的 Cargo 软件包管理器: $ cargo install fd-find 使用 fd 要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如: $ fd sh...例如: $ fd ....作为一个(正则)通配符,指示 fd 返回所有文件。 要了解更多关于 fd 的功能,请查阅 GitHub 上的 文档。
fd_set是一种数据类型,在select函数中包含了3个参数,就是这个fd_set类型,fd_set也是理解select模型的关键,关于select的具体说明,可以参考之前的文章嵌入式Linux编程之...select可以同时对多个文件描述符的状态去监听,那么这个所谓的“多个”的实现就是通过fd_set来实现的, 简单的说: fd_set是select监听描述符的集合,每个描述符集存储在一个fd_set...,也就是只有8bit,那么1个字节长的fd_set最大可以对应8个文件描述符(fd), 那么问题来了,如果文件描述符是100怎么办?...答案很简单,fd_set并不是指有1个字节,可以有n个字节,可以拿多个字节凑多个bit,如果fd是100,仍然可以执行 FD(100, &set),执行后,set的值为 1xxxxxxxxxxx.......至于fd_set的最大为多少,取决于机器,一般 是够用的,因为linux在分配文件描述符的时候,不是随意分配 个几千几万的,这个是比较宝贵的资源,是从小到大,一点点递增的,谁也不会傻到同时打开几万个文件的
02.1 open open 是 Unix/Linux 系统中用于打开或创建文件的系统调用,位于 fcntl.h 头文件中。它用于以不同的模式访问文件,如只读、写入、追加等。...{ perror("open"); return 1; } const char *message = "hello linux\n";...logd.txt",O_WRONLY|O_CREAT|O_APPEND,0666); printf("fdd:%d\n",fdd); return 0; } 文件描述符数字为3 4 5 6 Linux...所以文件描述符fd的本质是内核的进程的,文件映射关系数组的下标 所以文件一旦打开,我们发现,write,read,close都需要参数fd,一旦fd传入,操作系统就能知道你要访问当前系统的哪个文件 所以读文件就是把缓存中的内容拷贝到应用层...我们需要理解,linux,一切皆为文件 在linux层面上他是怎么做到的呢?
二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...sockaddr*)&caddr,sizeof(caddr)); } close(sockfd); exit(0); } 2.客户端 代码如下(示例): int main() { int sockfd = socket
1 2 许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。...安装 fd 在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。...另外,你也可以使用 Rust 的 Cargo 软件包管理器: $ cargo install fd-find 使用 fd 要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如: $ fd shregistry...例如: $ fd ....作为一个(正则)通配符,指示 fd 返回所有文件。 要了解更多关于 fd 的功能,请查阅 GitHub 上的 文档。
Socket 编程 6.1 socket 常见API Socket API 是一层网络编程接口,抽象了底层的网络协议,定义在 netinet/in.h 中。...常见通用API: // 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器) int socket(int domain, int type, int protocol); //...① (TCP 常见API) // 开始监听socket (TCP, 服务器) int listen(int socket, int backlog); // 接收请求 (TCP, 服务器) int...Socket 接口 7.1 创建 Socket 文件描述符 在 TCP 和 UDP 通信中,首先要创建一个 Socket 文件描述符,它本质上是一个网络文件。...local.sin_addr.s_addr = INADDR_ANY; Listening Socket vs Connected Socket Listening Socket:服务器使用它来监听连接请求
许多 Linux 程序员在其工作中每天都在使用 find 命令。但是 find 给出的文件系统条目是有限的,如果你要进行大量的 find 操作,它甚至不是很快速。...因此,我更喜欢使用 Rust 编写的 fd 命令,因为它提供了合理的默认值,适用于大多数使用情况。 正如它的 README 所说,“fd 是一个在文件系统中寻找条目的程序。...安装 fd 在 Linux 上,你可以从你的软件库中安装 fd(可用的软件包列表可以在 Repology 上的 fd 页面 找到)。...另外,你也可以使用 Rust 的 Cargo 软件包管理器: $ cargo install fd-find 使用 fd 要做一个简单的搜索,运行 fd 并在后面跟上要搜索的名字,例如: $ fd shregistry...例如: $ fd .
场景1: 应用程序创建了socket,但是当作为client端时没有调用connect去连接server端: 模拟构造问题现象程序: #include #include socket.h...> #include #define PORT 8080 #define BUFFER_SIZE 1024 int main() { int server_fd, new_socket...= socket(AF_INET, SOCK_STREAM, 0); if (server_fd == 0) { perror("socket creation failed"); exit(EXIT_FAILURE..., 5) < 0) { perror("listen failed"); exit(EXIT_FAILURE); } new_socket = accept(server_fd, (struct sockaddr...Check `ls -l /proc/%d/fd` for leaked file descriptors.
函数原型(C/C++) 在 POSIX 系统(如 Linux)中,listen 函数的原型如下: int listen(int sockfd, int backlog); 在 Windows 系统中,listen...函数原型(C/C++) 在 POSIX 系统(如 Linux)中,accept 函数的原型如下: int accept(int sockfd, struct sockaddr *addr, socklen_t...浪费 文件描述符(File Descriptor, FD)泄露是指程序在运行过程中打开了文件或其他资源(如套接字、管道等),但没有正确关闭它们,导致这些文件描述符一直占用系统资源的情况。...EchoServer -- 线程池 引入我们之前写的【Linux】:线程库 Thread.hpp 简单封装 Thread.hpp 以及 单例模式下的【Linux】:日志策略 + 线程池(单例模式 Threadpool.hpp...从文件描述符来进行读写 -- recv / send 上面我们使用的 read 和 write 都是文件中进行的读写,假如我们想从 文件描述符 fd 中来读取数据 呢?
linux socket的基础 linux的空间分为kernel space 和 user space, 比例是1:3 linux中一切皆文件, 所以用文件描述符来表示socket, 实际上是socket...用来进程与进程之间的通信 socket如何创建 一个进程要创建socket的流程如下所示 1....上查看socket ll /proc//fd linux默认的三个文件描述符 0 - stdin 1 - stdout 2 - stderr >& 是重定向到文件描述符...基于socket的应用 java nio java nio用channel代替了输入输出流, 这个channel, 就是socket 其原理是使用了linux kernel里的fcntl /*...(2) NAME select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing
创建socket _sockfd = ::socket(AF_INET, SOCK_DGRAM, 0); if (_sockfd < 0) {...LOG(LogLevel::FATAL) socket: " << strerror(errno); Die(SOCKET_ERR); }...LOG(LogLevel::FATAL) socket: " << strerror(errno); Die(SOCKET_ERR); }...创建socket sockfd = ::socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { std::cerr socket socket // client必须也要有自己的ip和端口!但是客户端,不需要自己显示的调用bind!!
介绍在Linux系统中,fd命令是一条用于显示文件描述符(File Descriptor)的命令。文件描述符是操作系统用于跟踪和管理打开文件的整数值,它是对打开文件的引用。...通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。图片2. 语法使用fd命令的语法如下:fd [选项]3....4.3 显示文件描述符的类型使用fd -t命令可以显示当前进程的文件描述符的类型。...总结Linux fd命令是用于显示文件描述符的实用命令。通过fd命令,我们可以查看当前进程所打开的文件描述符及其相关信息,包括文件描述符的编号、打开模式、文件路径等。...在日常的系统管理和开发工作中,熟悉和掌握fd命令的使用将大大提高工作效率。希望本文对你理解和使用Linux fd命令有所帮助。如需进一步了解命令的更多细节和用法,请查阅相关的文档和参考资料。
在前面几篇文章中,我们实现了Socket编程,也就是基于UDP和TCP进行了网络编程,通过这几次编程我们已经熟悉了Socket编程相关的系统调用,那么这篇文章我们就来使用模版方法模式封装一个Socket...:_sockfd(defaultfd) {} // 将connect返回的文件描述符构造为套接字类型 TcpSocket(int fd...) :_sockfd(fd) {} ~TcpSocket() {} private: int _sockfd...{ struct sockaddr_in peer; socklen_t len = sizeof(peer); int fd...= ::accept(_sockfd, (struct sockaddr*)&peer, &len); if (fd < 0) {
如果对你有帮助,麻烦点个在看或点个赞,感谢~ 不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。...下面的程序主要是Linux C Socket 读取JSON文件并传输,然后再写入文件,其中使用了cJSON库,关于cJSON库不过多介绍,主要介绍整体的思路。 1....,将socket通信独立出来,JSON解析、写文件、响应客户端JSON数据等分别写成函数。...server fd faild \n"); } RecDataFromClient(socketServerFd); return 0; } 函数封装: int ParseRecvJsonData...小结 编译JSON时需要链接linux的数学库 自己琢磨如何拆解函数功能 应用程序也主要是调用别人的api,那么你的核心竞争力是什么呢 ? 如需程序工程可在公众号后台留言。
TCP socket API 详解 下面介绍程序中用到的 socket API,这些函数都在 sys/socket.h 中。...socket() 作用:打开一个网络通讯端口,如果成功的话,就像 open()一样返回一个文件描述符; 应用程序可以像读写文件一样用 read/write 在网络上收发数据; 返回值:如果 socket...// 读取失败 break; } } ::close(sockfd); // fd..."; // 我们要获取client的信息:数据(sockfd)+client socket信息(accept || recvfrom) int sockfd...if(id == 0)//子进程 { ::close(_listensockfd);//要关掉不需要的文件描述符,避免fd
Socket soket接口是TCP/IP网络的API。网络的socket数据传输是一种特别的I/O,socket也是一种文档描述符。...利用socket()函数打开,返回一个整型的socket描述符,然后建立连接,数据传输等等。...常用的socket类型有:流式socket(SOCK_STREAM)、数据报socket(SOCK_DGRAM)....其中流式socket是采用面向连接的TCP服务,而数据报socket则是无连接的UDP服务 Socket建立 调用: int socket(int domain, int type, int...收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址联系起来,收到服务请求的初始socket仍能够继续在以前的 socket上监听,同时能够在新的
原创文章,允许转载,但转载必须注明出处并附带首发链接 https://blog.csdn.net/FungLeo/article/details/80760746 好用的 Linux...今天发现了一个好用的命令 fd 命令 该命令 github 仓库地址: https://github.com/sharkdp/fd fd 命令安装方法 Ubuntu or Deepin … and other...Debian-based Linux distributions.....deb # adapt version number and architecture Arch Linux pacman -S fd On macOS You can install fd with...Homebrew: brew install fd 使用演示: ?
前言 在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。...函数介绍 - 发送和接收 - (1)send和write: 首先说明的一点,之前介绍的socket这个函数,非常类似我们之前介绍的open函数,他们都会返回一下文件描述符;所以这里的send函数和write...函数作用类似,我们用man手册来查看它的具体形式和用法: #include #include socket.h> ssize_t send(int...(这个转换完后不能用于网络传输,还需要调用htons或htonl函数才能将主机字节顺序转化为网络字节顺序,这两个函数先不讲,实战遇到的话,再进行解析),具体可以看下面Linux的源文: inet_aton...(2)struct sockaddr,这个结构体是linux的网络编程接口中用来表示IP地址的 标准结构体,bind、connect等函数中都需要这个结构体,这个结构体是兼容IPV4和IPV6的。
在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); int close(int fd...后,配置一下套接字,允许进行发送广播消息,上代码 int set_broadcast = 1; setsockopt(socket, SOL_SOCKET, SO_BROADCAST, &set_broadcast...解决方法如下:(允许端口重用) int on = 1; ret = setsockopt(udp_net_sta.socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof...(int)); if (ret < 0) { perror("socket set SO_REUSEADDR failed"); } 2、服务端程序,在创建完socket后,有一个bind的操作