Linux中,socket 也是被认为是文件的一种

window中,需要区分socket和文件

  • 文件描述符:window中叫文件句柄;可以理解成分配的ID
  • socket经过创建的过程中才会被分配文件描述符

文件操作

  • 打开文件 int open(const char *path, int flag),flag是打开的模式,多个模式用OR连接,返回的就是文件描述符。(#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>)
  • 关闭文件int close(int fd),这个同样可以关闭socket。(#include <unistd.h>)
  • 将数据写入文件:ssize_t write(int fd, const void *buf, size_t nbytes);,(#include <unistd.h>)
  • size_t 是 unsigned int,ssize_t 是 signed int

读写文件操作

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>void error_handling(char *message);int main(void)
{int fd;char buf[] = "Let's go! \n";// 设置权限umask(0000);if(creat("data.txt", 0777) == -1)error_handling("creat() error\n");// 写入数据fd = open("data.txt", O_CREAT|O_WRONLY|O_TRUNC);if(fd == -1)error_handling("write open() error\n");printf("file descriptor %d\n", fd);if(write(fd, buf, sizeof(buf)) == -1)error_handling("write() error\n");printf("write over.\n");close(fd);// 读取数据fd = open("data.txt", O_RDONLY);if(fd == -1)error_handling("read open() error\n");char read_buf[100];if(read(fd, read_buf, sizeof(read_buf)) == -1)error_handling("read() error\n");printf("file data is %s\n", read_buf);close(fd);return 0;
}void error_handling(char *message)
{perror(message);exit(1);
}

注:

  • 如果提示没有权限,可以参考 Permission denied: https://blog.csdn.net/aicamel/article/details/80922459,在创建文件的时候,设置权限
  • 这些文件IO操作同样适用于socket
  • 文件描述符从3开始,从小到大编号,因为0、1、2被分配给了标准IO描述符

同时创建文件和套接字,打印出对应的文件描述符

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/stat.h>void error_handling(char *message);int main(void)
{int fd1, fd2, fd3;char *file_name = "data.dat";// 设置权限umask(0000);if(creat(file_name, 0777) == -1)error_handling("creat() error\n");fd1 = socket(PF_INET, SOCK_STREAM, 0);fd2 = open(file_name, O_CREAT|O_WRONLY|O_TRUNC);fd3 = socket(PF_INET, SOCK_STREAM, 0);printf("file descripor 1: %d\n", fd1);printf("file descripor 2: %d\n", fd2);printf("file descripor 3: %d\n", fd3);close(fd1);close(fd2);close(fd3);return 0;
}void error_handling(char *message)
{perror(message);exit(1);
}

其他:

  • 常用的flag常量值:只读(O_RDONLY),只写(O_WRONLY),读写(O_RDWR),必要时创建文件(O_CREAT),删除现有数据(O_TRUNC),追加模式(O_APPEND)
  • 0、1、2文件描述符分别是标准输入、输出、错误

socket 文件描述符相关推荐

  1. Linux中通过Socket文件描述符寻找连接状态介绍

    针对下文的总结:socket是一种文件描述符 进程的打开文件描述符表 Linux的三个系统调用:open,socket,pipe 返回的都是一个描述符.不同的进程中,他们返回的描述符可以相同.那么,在 ...

  2. C语言socket accept()函数(提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符)

    文章目录 名称 使用格式 功能参数描述 参数 sockfd addr addrlen 返回值 示例 man 2 文档中的accept解释 错误处理 名称 accept() 接收一个套接字中已建立的连接 ...

  3. TCP/UDP网络编程入门教程之二:TCP Server端——socket与文件描述符

    UNIX中的一切事物都是文件(everything in Unix is a file!) 当我在这篇教程中提到UNIX的时候,其意思专指符合UNIX标准的所谓"正统"UNIX的衍 ...

  4. socket与文件描述符

    在Linux编程时,无论是在操作文件还是网络操作时都能够通过文件描述符来read或者write.之前在没有接触C++的时候,不懂面向对象的那套东西.自从学习了C++以及面向对象的一些知识以后突然对Li ...

  5. socket 编程入门教程(一)TCP server 端:2、socket与文件描述符

    UNIX中的一切事物都是文件( everything in Unix is a file!) 当我在这篇教程中提到UNIX的时候,其意思专指符合UNIX标准的所谓"正统"UNIX的 ...

  6. unix文件描述符——socket

    在unix系统中,socket和普通文件一样对待,因为它可以像普通文件一样被读和写,但是它还有一些自己独特的特点,例如,文件的读写位置可以设置,但是socket只能被顺序的读写等等,那么在unix系统 ...

  7. linux unix域socket_从文件描述符到Socket

    回顾 在上一篇[谈谈我对学习Netty的看法]大致描述了学习netty整个知识的储备,今天就从最基础的文件描述符开始. 文件描述符 我们知道在linux系统中一切皆文件,而文件又可分为:普通文件.目录 ...

  8. java套接字创建失败_Linux的文件描述符个数限制导致创建文件(或socket)失败的问题...

    众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd.当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的.本文着着重讲述socket有关的内容.当我们 ...

  9. 文件描述符与socket连接

    文件描述符与socket连接 每个进程开启一个soeket连接,都会占用一个文件描述符. 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件. 文 ...

最新文章

  1. SpringBoot报错:Could not autowire. No beans of ‘DiscussantMapper‘ type found
  2. ITK:获取图像大小
  3. 怪物行为树案例_Behavior Designer行为树(简单实现巡逻)
  4. Nginx实现通过不同的url前缀访问不同的前后端项目
  5. TDengine在数控机床监控中的应用
  6. 硬核知识,C/C++移植法则分享
  7. android 异步图片加载 开源,异步加载图片BitmapFun分析
  8. -bash: ifconfig: 未找到命令
  9. (一)PyQt5系列教程:使用PyQt5创建一个简单的demo
  10. python protoc
  11. video 圆角 html,圆形视频和圆角视频的一种实现方式
  12. 服务器受到DDOS攻击怎么办
  13. Redis常见面试题整理
  14. 机器人运动控制-水下机器人
  15. javafx与MySQL的连接_如何让javafx界面直接连接数据库?
  16. 盘点2018年网络空间安全热点:GDRP,微隔离,容器安全,SOC······
  17. 文本分类模型学习笔记
  18. JS解构和 ... 运算符
  19. Vue elementUI-select多选下拉框数据回显成功后,点击下拉选项或删除回显数据无反应...
  20. 2021年中国互联网广告市场年度分析

热门文章

  1. C/C++语言练习题
  2. 面板数据缺失填补-stata实现线性插值法过程
  3. 2021年山东省苹果产量分布及出口情况[图]
  4. 干货分享 | Shader 实现 PPT 转场效果(附源码)
  5. 前端学习之HTTP 和 HTTPS
  6. python高端玩法_这7种Python的全新玩法,一般人都不知道!
  7. 武汉大学计算机假期有什么活动,关于2018年“中秋节、国庆节”学生放假的通知...
  8. 羊了个羊1.0(第一关)
  9. 一年赚一百万的思路—别做大多数的傻瓜
  10. 论文 MiNet: Mixed Interest Network for Cross-Domain Click-Through Rate Prediction