目录
- 套接字地址族
- 文件锁(Flock)
- 文件描述符操作标志
- 因特网域套接字定义的协议
- 建议性锁操作类型
- 内存空间的使用建议
- 内存映射对象的类型
- 套接字调用标志
- 内存与物理存储同步
- 文件状态标志
- 程序进程执行优先权
- 内存保护标志位
- 进程追踪
- 资源限制
- 套接字级控制消息
- 禁止套接字的I/O
- 套接字类型
- 套接字选项
- 文件类型
- 文件访问权限
- 对输入和输出流控制
- 等待子进程中断或结束
- 巨人的肩膀
- VChat
套接字地址族
AF_ALG
:AF_APPLETALK
:AF_ASH
:AF_ATMPVC
:AF_ATMSVC
:AF_AX25
:AF_BLUETOOTH
:AF_BRIDGE
:AF_CAIF
:AF_CAN
:AF_DECnet
:AF_ECONET
:AF_FILE
:AF_IEEE802154
:AF_INET
: IPV4因特网域AF_INET6
: IPV6因特网域AF_IPX
: NetWare 协议族AF_IRDA
:AF_ISDN
:AF_IUCV
:AF_KEY
:AF_LLC
:AF_LOCAL
: 使用文件系统本地的UNIX域套接字AF_MAX
:AF_NETBEUI
:AF_NETLINK
:AF_NETROM
:AF_PACKET
:AF_PHONET
:AF_PPPOX
:AF_RDS
:AF_ROSE
:AF_ROUTE
:AF_RXRPC
:AF_SECURITY
:AF_SNA
:AF_TIPC
:AF_UNIX
: UNIX域AF_UNSPEC
: 可以代表“任何”域AF_WANPIPE
:AF_X25
:
文件锁(Flock)
F_GETLK
: 判断锁是否会被另外一把锁所排斥(阻塞)F_GETLK64
:F_SETLK
: 设置锁F_SETLKW
: 此命令也用来清除锁F_SETLKW64
:F_RDLCK
: 共享读锁F_TLOCK
:F_ULOCK
:F_UNLCK
: 解锁F_WRLCK
: 独占性写锁F_EXLCK
:F_LOCK
:F_SETLK64
:F_SHLCK
:
文件描述符操作标志
FD_CLOEXEC
: 用来控制在执行 exec 后,是否关闭对应的文件描述符FD_SETSIZE
: 最大的文件描述符数量F_DUPFD
: 复制文件描述符fdF_DUPFD_CLOEXEC
: 复制文件描述符,设置与新描述符关联的FD_CLOEXEC文件描述符标志的值,返回新文件描述符F_GETFD
: 对应于fd的文件描述符标志作为函数值返回F_GETFL
: 获得获得/设置文件状态标志文件状态标志F_GETLEASE
:F_GETOWN
: 获取当前接收SIGIO和SIGURG信号的进程ID或进程组IDF_GETOWN_EX
:F_GETPIPE_SZ
:F_GETSIG
:F_NOTIFY
:F_OK
: 文件是否存在F_SETFD
: 设置文件描述符标志F_SETFL
: 设置文件状态标志F_SETLEASE
:F_SETOWN
: 设置接收SIGIo和SIGURG信号的进程ID或进程组IDF_SETOWN_EX
:F_SETPIPE_SZ
:F_SETSIG
:F_TEST
:
因特网域套接字定义的协议
IPPROTO_AH
:IPPROTO_COMP
:IPPROTO_DCCP
:IPPROTO_DSTOPTS
:IPPROTO_EGP
:IPPROTO_ENCAP
:IPPROTO_ESP
:IPPROTO_FRAGMENT
:IPPROTO_GRE
:IPPROTO_HOPOPTS
:IPPROTO_ICMP
: 因特网控制报文协议IPPROTO_ICMPV6
:IPPROTO_IDP
:IPPROTO_IGMP
:IPPROTO_IP
: IPv4网际协议IPPROTO_IPIP
:IPPROTO_IPV6
: IPv6网际协议IPPROTO_MTP
:IPPROTO_NONE
:IPPROTO_PIM
:IPPROTO_PUP
:IPPROTO_RAW
: 原始IP数据包协议IPPROTO_ROUTING
:IPPROTO_RSVP
:IPPROTO_SCTP
:IPPROTO_TCP
: 传输控制协议IPPROTO_TP
:IPPROTO_UDP
: 用户数据报协议IPPROTO_UDPLITE
:
建议性锁操作类型
LOCK_EX
: 排他锁,同时只允许一个进程使用,常被用作写锁LOCK_NB
: 尝试上锁时系统就不会阻塞该进程,返回错误码为EWOULDBLOCK。
LOCK_SH
: 共享锁,多个进程可以使用同一把锁,常被用作读共享锁LOCK_UN
: 释放锁
内存空间的使用建议
如何使用某些映射或者共享内存区域
MADV_CAN_REUSE
:MADV_DONTNEED
: 数据不会再用请勿缓存,内核可以释放与之相关的资源MADV_FREE
: 不再需要指定范围内的页面。内核因此可以释放这些页面,但不是立即释放,而是当出现内存压力时释放MADV_FREE_REUSABLE
:MADV_FREE_REUSE
:MADV_NORMAL
: 默认操作,不做任何特殊处理MADV_RANDOM
: 随机的顺序访问MADV_SEQUENTIAL
: 顺序的访问MADV_WILLNEED
: 数据将会再用MADV_ZERO_WIRED_PAGES
:
内存映射对象的类型
MAP_ANON
: 匿名映射,会忽略参数fd,不涉及文件,而且映射区域无法和其他进程共享MAP_COPY
:MAP_FILE
:MAP_FIXED
: 如果所指的地址无法成功建立映射时,则放弃映射,不对地址做修正MAP_HASSEMAPHORE
:MAP_JIT
:MAP_NOCACHE
:MAP_NOEXTEND
:MAP_NORESERVE
:MAP_PRIVATE
: 建立一个写入时拷贝的私有映射,写入数据不影响原文件MAP_RENAME
:MAP_RESERVED0080
:MAP_SHARED
: 共享映射,写入数据会复制回文件, 与映射该文件的其他进程共享
套接字调用标志
MSG_CMSG_CLOEXEC
: 为UNIX域套接字上接收的文件描述符设置执行时关闭标志MSG_CONFIRM
: 提供链路层反馈以保持地址映射有效MSG_CTRUNC
: 控制数据被截断MSG_DONTROUTE
: 勿将数据包路由出本地网络MSG_DONTWAIT
: 允许非阻塞操作(等价于使用O_NONBLOCK)MSG_EOR
: 如果协议支持,标记记录结束MSG_ERRQUEUE
: 接收错误信息作为辅助数据MSG_FASTOPEN
:MSG_FIN
:MSG_MORE
: 延迟发送数据包允许写更多数据MSG_NOSIGNAL
: 在写无连接的套接字时不产生SIGPIPE信号MSG_OOB
: 如果协议支持,发送带外数据MSG_PEEK
: 返回数据包内容而不真正取走数据包MSG_PROXY
:MSG_RST
:MSG_SYN
:MSG_TRUNC
: 即使数据包被截断,也返回数据包的实际长度MSG_TRYHARD
:MSG_WAITALL
: 等待直到所有的数据可用(仅SOCK_STREAM)MSG_WAITFORONE
:
内存与物理存储同步
MS_ACTIVE
:MS_ASYNC
: 异步写入MS_BIND
:MS_DIRSYNC
:MS_INVALIDATE
: 使缓存数据无效MS_I_VERSION
:MS_KERNMOUNT
:MS_MANDLOCK
:MS_MGC_MSK
:MS_MGC_VAL
:MS_MOVE
:MS_NOATIME
:MS_NODEV
:MS_NODIRATIME
:MS_NOEXEC
:MS_NOSUID
:MS_NOUSER
:MS_POSIXACL
:MS_PRIVATE
:MS_RDONLY
:MS_REC
:MS_RELATIME
:MS_REMOUNT
:MS_RMT_MASK
:MS_SHARED
:MS_SILENT
:MS_SLAVE
:MS_STRICTATIME
:MS_SYNC
: 同步写入MS_SYNCHRONOUS
:MS_UNBINDABLE
:
NAME_MAX
: 文件名的最大字节数(不包括终止null字节)
文件状态标志
O_ACCMODE
: 取得访问模式位(文件状态标志的后两位)O_APPEND
: 每次写时都追加到文件的尾端O_ASYNC
: 异步I/O(仅FreeBSD和Mac OSX)O_CLOEXEC
: 把FD_CLOEXEC常量设置为文件描述符标志O_CREAT
: 若此文件不存在则创建O_DIRECT
: 绕过缓冲区高速缓存,直接IOO_DIRECTORY
: 如果path引用的不是目录,则出错。O_DSYNC
: 等待写完成(仅数据)。使每次write要等待物理I/O操作完成,但是如果该写操作并不影响读取刚写入的数据,则不需等待文件属性被更新O_EXCL
: 如果同时指定了O_CREAT,而文件已经存在,则出错。用此可以测试一个文件是否存在,如果不存在,则创建此文件,这使测试和创建两者成为一个原子操作O_FSYNC
: 等待写完成(仅FreeBSD和Mac OSX)O_LARGEFILE
:O_NDELAY
: 不延迟O_NOATIME
:O_NOCTTY
: 如果path引用的是终端设备,则不将该设备分配作为此进程的控制终端O_NOFOLLOW
: 如果path引用的是一个符号链接,则出错O_NONBLOCK
: 如果path引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则此选项为文件的本次打开操作和后续的I/O操作设置非阻塞方式O_RDONLY
: 只读打开O_RDWR
: 读、写打开O_RSYNC
: 同步读和写。使每一个以文件描述符作为参数进行的read操作等待,直至所有对文件同一部分挂起的写操作都完成O_SYNC
: 等待写完成(数据和属性)。使每次write等待物理I/O操作完成,包括由该write操作引起的文件属性更新所需的I/OO_TRUNC
: 如果此文件存在,而且为只写或读-写成功打开,则将其长度截断为0O_WRONLY
: 只写打开
程序进程执行优先权
PRIO_PGRP
: 进程的组识别码PRIO_PROCESS
: 进程识别码PRIO_USER
: 用户识别码
内存保护标志位
共享内存的访问权限
PROT_EXEC
: 页内容可以被执行PROT_NONE
: 页不可访问PROT_READ
: 页内容可以被读取PROT_WRITE
: 页可以被写入PROT_GROWSDOWN
:PROT_GROWSUP
:
进程追踪
PTRACE_ARCH_PRCTL
:PTRACE_ATTACH
: 附带(attach)pid子进程PTRACE_CONT
:PTRACE_DETACH
: 分离(detach)pid 子进程PTRACE_EVENT_CLONE
:PTRACE_EVENT_EXEC
:PTRACE_EVENT_EXIT
:PTRACE_EVENT_FORK
:PTRACE_EVENT_VFORK
:PTRACE_EVENT_VFORK_DONE
:PTRACE_GETEVENTMSG
:PTRACE_GETFPREGS
:PTRACE_GETFPXREGS
:PTRACE_GETREGS
:PTRACE_GETREGSET
:PTRACE_GETSIGINFO
:PTRACE_GET_THREAD_AREA
:PTRACE_KILL
:PTRACE_OLDSETOPTIONS
:PTRACE_O_MASK
:PTRACE_O_TRACECLONE
:PTRACE_O_TRACEEXEC
:PTRACE_O_TRACEEXIT
:PTRACE_O_TRACEFORK
:PTRACE_O_TRACESYSGOOD
:PTRACE_O_TRACEVFORK
:PTRACE_O_TRACEVFORKDONE
:PTRACE_PEEKDATA
: 从pid子进程的内存地址addr中读取一个dataPTRACE_PEEKTEXT
: 从pid子进程的内存地址addr中读取一个dataPTRACE_PEEKUSR
: 从pid 子进程的USER区域内地址addr中读取一个dataPTRACE_POKEDATA
: 将data写入pid子进程的内存地址addr中PTRACE_POKETEXT
: 将data写入pid子进程的内存地址addr中PTRACE_POKEUSR
: 将data写入pid 子进程的USER区域内地址addr中PTRACE_SETFPREGS
:PTRACE_SETFPXREGS
:PTRACE_SETOPTIONS
:PTRACE_SETREGS
:PTRACE_SETREGSET
:PTRACE_SETSIGINFO
:PTRACE_SET_THREAD_AREA
:PTRACE_SINGLEBLOCK
:PTRACE_SINGLESTEP
: 设置pid子进程的单步追踪旗标PTRACE_SYSCALL
: 继续pid 子进程的执行PTRACE_SYSEMU
:PTRACE_SYSEMU_SINGLESTEP
:PTRACE_TRACEME
: 此进程将由父进程追踪
资源限制
RLIMIT_AS
: 进程总的可用存储空间的最大长度(字节)RLIMIT_CORE
: core文件的最大字节数RLIMIT_CPU
: cpu时间的最大量值(秒),当超过此软限制时,向该进程发送sigxcpu信号RLIMIT_DATA
: 数据段的最大字节长度RLIMIT_FSIZE
: 创建的文件的最大字节长度RLIMIT_NOFILE
: 每个进程能打开的最多文件数RLIMIT_STACK
: 栈的最大字节长度RLIM_INFINITY
: 表示对资源没有限制
套接字级控制消息
SCM_CREDENTIALS
: 传送证书SCM_RIGHTS
: 传送访问权SCM_TIMESTAMP
:SCM_TIMESTAMPING
:SCM_TIMESTAMPNS
:
禁止套接字的I/O
SHUT_RD
: 关闭读端SHUT_RDWR
: 关闭写端SHUT_WR
: 既无法读取数据,又无法发送数据
套接字类型
SOCK_CLOEXEC
:SOCK_DCCP
:SOCK_DGRAM
: 固定长度的、无连接的、不可靠的报文传递SOCK_NONBLOCK
:SOCK_PACKET
:SOCK_RAW
: IP协议的数据报接口SOCK_RDM
:SOCK_SEQPACKET
: 固定长度的、有序的、可靠的、面向连接的报文传递SOCK_STREAM
: 有序的、可靠的、双向的、面向连接的字节流
套接字选项
SO_ACCEPTCONN
: 返回信息指示该套接字是否能被监听SO_ATTACH_FILTER
:SO_BINDTODEVICE
:SO_BROADCAST
: 广播数据报SO_BSDCOMPAT
:SO_DEBUG
: 启用网络驱动调试功能SO_DETACH_FILTER
:SO_DOMAIN
:SO_DONTROUTE
: 绕过通常路由SO_ERROR
: 返回挂起的套接字错误并清除SO_KEEPALIVE
: 启用周期性keep-alive报文SO_LINGER
: 当还有未发报文而套接字已关闭时,延迟时间SO_MARK
:SO_NO_CHECK
:SO_OOBINLINE
: 当接收到OOB(out-of-band)数据时会马上送至标准输入设备SO_PASSCRED
:SO_PASSSEC
:SO_PEERCRED
:SO_PEERNAME
:SO_PEERSEC
:SO_PRIORITY
:SO_PROTOCOL
:SO_RCVBUF
: 接收缓冲区的字节长度SO_RCVBUFFORCE
:SO_RCVLOWAT
: 接收调用中返回的最小数据字节数SO_RCVTIMEO
: 套接字接收调用的超时值SO_REUSEADDR
: 重用bind中的地址SO_RXQ_OVFL
:SO_SECURITY_AUTHENTICATION
:SO_SECURITY_ENCRYPTION_NETWORK
:SO_SECURITY_ENCRYPTION_TRANSPORT
:SO_SNDBUF
: 发送缓冲区的字节长度SO_SNDBUFFORCE
:SO_SNDLOWAT
: 发送调用中传送的最小数据字节数SO_SNDTIMEO
: 套接字发送调用的超时值SO_TIMESTAMP
:SO_TIMESTAMPING
:SO_TIMESTAMPNS
:SO_TYPE
: 标识套接字类型
文件类型
S_BLKSIZE
:S_IEXEC
:S_IFBLK
: 块设备文件S_IFCHR
: 字符设备文件S_IFDIR
: 目录S_IFIFO
: FIFO文件S_IFLNK
: 符号链接(symbolic link)S_IFMT
: 所有文件类型S_IFREG
: 普通文件S_IFSOCK
: 套接字文件
文件访问权限
S_IREAD
:S_IRGRP
: 组读S_IROTH
: 其他读S_IRUSR
: 用户读S_IRWXG
: 组读、写和执行S_IRWXO
: 其他读、写和执行S_IRWXU
: 用户(所有者)读、写和执行S_ISGID
: 执行时设置组DS_ISUID
: 执行时设置用户IDS_ISVTX
: 保存正文(粘着位)S_IWGRP
: 组写S_IWOTH
: 其他写S_IWRITE
:S_IWUSR
: 用户写S_IXGRP
: 组执行S_IXOTH
: 其他执行S_IXUSR
: 用户执行
对输入和输出流控制
TCIFLUSH
: 刷清输入队列TCIOFLUSH
: 刷清输入、输出队列TCOFLUSH
: 刷清输出队列
等待子进程中断或结束
WALL
:WCLONE
:WCONTINUED
: 若实现支持作业控制,那么由pid指定的任一子进程在停止后已经继续,但其状态尚未报告,则返回其状态WEXITED
: 等待已退出的进程WNOHANG
: 若由pid指定的子进程并不是立即可用的,则waitpid不阻塞,此时其返回值为0WNOTHREAD
:WNOWAIT
: 不破坏子进程退出状态WORDSIZE
:WSTOPPED
: 等待一进程,它已经停止,但其状态尚未报告WUNTRACED
: 若某实现支持作业控制,而由pid指定的任一子进程已处于停止状态,并且其状态自停止以来还未报告过,则返回其状态
巨人的肩膀
https://lequ7.com/yong-Go-xue-UNIX-huan-jing-bian-cheng-ji-lu-suo.html
https://geektutu.com/post/quick-go-mmap.html
https://www.jianshu.com/p/965b1ed71ae4
https://blog.csdn.net/bbdxf/article/details/85211143
https://linux.die.net/man/
https://www.gnu.org/software/libc/manual/html_mono/libc.html
《UNIX环境高级编程(中文第三版)》
VChat
一个没有哆啦A梦和静香的IT码农,不专业Gopher