socket 套接字编程 函数 简单总结.doc_第1页
socket 套接字编程 函数 简单总结.doc_第2页
socket 套接字编程 函数 简单总结.doc_第3页
socket 套接字编程 函数 简单总结.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I/Ofopen(3)调用open(2)打开指定的文件,返回一个文件描述符(就是一个int类型的编号),分配一个FILE结构体,其中包含该文件的描述符、I/O缓冲区和当前读写位置等信息,返回这个FILE结构体的地址。fgetc(3)通过传入的FILE *参数找到该文件的描述符、I/O缓冲区和当前读写位置,判断能否从I/O缓冲区中读到下一个字符,如果能读到就直接返回该字符,否则调用read(2),把文件描述符传进去,让内核读取该文件的数据到I/O缓冲区,然后返回下一个字符。注意,对于C标准I/O库来说,打开的文件由FILE *指针标识,而对于内核来说,打开的文件由文件描述符标识,文件描述符从open系统调用获得,在使用read、write、close系统调用时都需要传文件描述符。fputc(3)判断该文件的I/O缓冲区是否有空间再存放一个字符,如果有空间则直接保存在I/O缓冲区中并返回,如果I/O缓冲区已满就调用write(2),让内核把I/O缓冲区的内容写回文件。fclose(3)如果I/O缓冲区中还有数据没写回文件,就调用write(2)写回文件,然后调用close(2)关闭文件,释放FILE结构体和I/O缓冲区。Open:open函数可以打开或创建一个文件,函数返回值是文件描述符。#include #include #include int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);Eg:int fd, n, i; fd = open(/dev/tty, O_RDONLY|O_NONBLOCK);Closeclose函数关闭一个已打开的文件,函数参数是文件描述符。#include int close(int fd);返回值:成功返回0,出错返回-1并设置errnoRead()read函数从打开的设备或文件中读取数据。#include ssize_t read(int fd, void *buf, size_t count);返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 write()write函数向打开的设备或文件中写数据。#include ssize_t write(int fd, const void *buf, size_t count);返回值:成功返回写入的字节数,出错返回-1并设置errnowrite(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY);文件描述符用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索引(即 0、1、2、3 这些数字),这些索引就称为文件描述符(File Descriptor),用 int 型变量保存。程序启动时会自动打开三个文件:标准输入、标准输出和标准错误输出。在 C 标准库中分别用 FILE * 指针 stdin、stdout 和stderr 表示。这三个文件的描述符分别是 0、1、2errno:errno是一个全局变量,很多系统函数都会改变它。有些函数的错误码并不保存在errno中perror:perror函数将错误信息打印到标准错误输出,首先打印参数s所指的字符串,然后打印:号,然后根据当前errno的值打印错误原因。strerrorstrerror函数可以根据错误号返回错误原因字符串。有些函数的错误码并不保存在errno中,而是通过返回值返回,就不能调用perror打印错误原因了,这时就得使用strerror常用函数网络字节与主机字节转换函数#include uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);Eg:servAddr.sin_port=htons(servPort); 客户端ntohs(clientAddr.port): 服务器地址转换函数 printable to numbericint inet_pton(int family, const char *strptr, void *dst);const char *inet_ntop(int family, const void *src, char *dst, size_t len);套接字函数int socket(int family, int type, int protocol);例如: listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); int close (int socket); int connect(int socket,const struct sockaddr * address,socklen_t length) int bind(int socket,struct sockaddr * localAddress,socklen_t length) int listen(int socket,int maxclient) int accept(int socket ,struct sockaddr * clientAddr, soclen_t *addrLength) int recv int send IPV4 与 ipv6的不同 地址结构体:通用: struct sockaddr sa_family_t sa_family; char sa_data14;Ipv4Ipv6Struct in_addruint32_t s_addr;Struct in6_addruint128_t s_addr16Struct sockaddr_insa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;Char sin_zero8;Stru

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论