size_t ssize_t socklen_t


size_t

解释一:为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。
在32位系统上 定义为 unsigned int 也就是说在32位系统上是32位无符号整形。在64位系统上定义为 unsigned long 也就是说在64位系统上是64位无符号整形。size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是 size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和内存管理函数之类的地方广泛使用。而ssize_t这个数 据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的。
typedef unsigned long size_t

ssize_t是signed size_t

size_t是标准C库中定义的,应为unsigned int。定义为typedef int ssize_t。 而ssize_t:这个数据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是signed.意即:它表示的是sign size_t类型的
[注] read返回的就是ssize_t, 因为返回的错误码可以为负数,所以必需用它。

socklen_t

数据类型"socklen_t"和int应该具有相同的长度.否则就会破坏 BSD套接字层的填充.POSIX开始的时候用的是size_t, Linus Torvalds(他希望有更多的人,但显然不是很多) 努力向他们解释使用size_t是完全错误的,因为在64位结构中 size_t和int的长度是不一样的,而这个参数(也就是accept函数 的第三参数)的长度必须和int一致,因为这是BSD套接字接口 标准.最终POSIX的那帮家伙找到了解决的办法,那就是创造了 一个新的类型"socklen_t".Linux Torvalds说这是由于他们 发现了自己的错误但又不好意思向大家伙儿承认,所以另外 创造了一个新的数据类型.

size_t ssize_t socklen_t

时间: 2024-11-05 22:42:55

size_t ssize_t socklen_t的相关文章

回射服务器的头文件

#ifndef _MY_ERR_H_#define _MY_ERR_H_ #include <errno.h> /* for definition of errno */#include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va_list); /* * Nonfatal error related to a system call. * Print

《Linux系统编程》第二章笔记(一)

文件I/O 前言 文件概念对于Linux系统的重要性不言而喻,本章主要介绍了内核为文件的创建.读.写.定位等系统调用以及高效的I/O机制.Linux系统为文件操作提供了通用的系列系统调用,使开发人员能够对所有"文件"做相同的操作,同时还提供了ioctl()系统调用对非通用文件操作,fcntl()系统调用对文件描述符做操作. 此外Linux内核为了弥补CPU运算速度和磁盘I/O速度的巨大差异,引入了页缓存.页回写机制.简单来说就是读取文件时多读取一部分并保存在内核缓冲区中,在下次收到读取

unp.h

/* include unph *//* Our own header. Tabs are set for 4 spaces, not 8 */ #ifndef __unp_h#define __unp_h #include "../config.h" /* configuration options for current OS */ /* "../config.h" is generated by configure */ /* If anything chan

UDP echo demo

[netcomm.h] #ifndef NETCOMM_H#define NETCOMM_H #include <stdio.h>#include <string.h>#include <unistd.h>#include <time.h>#include <errno.h> #include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>

嵌入式 Linux根文件系统移植(一)——Linux文件系统简介

嵌入式 Linux根文件系统移植(一)--Linux文件系统简介 本文对文件系统分析的代码来源于linux 2.6.35.7版本. 一.文件系统的体系结构 文件系统是对存储设备上的数据和元数据进行组织的机制,便于用户和操作系统的交互.Linux支持多种文件系统,文件系统接口实现为分层的体系结构,将用户接口层.文件系统实现和操作存储设备的驱动程序分隔开.Linux文件系统的体系结构如下: 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C库(glibc),为文件系统调用(打开.读取.

Linux i/o 读写文件

获取文件描述后,就可以对文件进行读写操作. 1.读文件 ssize_t read(int fd, void* buf, size_t len); 参数: fd:文件描述符 buf:存储读取缓存 len:预计读取的字节数 返回值: 实际读取的字节数. 描述: 调用read后,系统会从fd参数所引用文件的当前位置读取len个字节,到buf中去.返回值是写入到buf的字节数目.执行成功,返回读取的字节数:失败返回-1,并设置erron. read读取的所有可能结果: ①return == len. 正

数据类型 -- uint32_t 类型

整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned.无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535.由于在计算机中,整数是以补码形式存放的.根据最高位的不同

快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是Windows,装虚拟机也麻烦,所以还不如30块钱 买个腾讯云,用putty远程练上去写代码呢. 我一直都是putty+VIM在Linux下开发代码,好几年了,只要把putty和VIM配置好,其实 开发效率挺高的. 买好腾讯云后,装个Centos,会分配个外网IP,然后买个域名,在DNSPod解析过去

unix环境高级编程附录 B 通用代码

0.说明: 在测试 unix 环境高级编程中的代码时,需要一些作者事先写好的代码, 如: apue.h 包含某些标准系统头文件,定义许多常量及函数原型 还有两个作者自编的函数来对错误进行处理 1.epue.h 源码   /* * ===================================================================================== * * Filename: apue.h * * Description: * * Version