Skip to content

FaithALL/UnixProgramming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

UnixProgramming

这是我学习Unix(主要是linux)系统编程与网络编程的笔记,附上部分源码

系统编程

  • 进程

    • 创建fork
    • 执行exec
    • 销毁wait/waitpid(SIGCHLD)
    • 进程间通信:
      • 匿名管道pipe,命名管道(FIFO)mkfifo
      • System V IPC(还有一组POSIX接口,更易用,可以参考《TLPI》)
        • 信号量semgetsemopsemctl
        • 消息队列msggetmsgsnd/msgrcvmsgctl
        • 共享内存shmgetshmat/shmdtshmctl
      • UNIX域套接字socketpair/socketsocket
      • 信号kill
  • 线程

    • 线程模型:内核线程、用户线程、双层调度
    • 线程API
      • 创建pthread_create
      • 初始化pthread_once
      • 结束pthread_exit
      • 回收pthread_join
      • 取消pthread_cancelpthread_setcancelstatepthread_setcanceltype
      • 线程属性pthread_attr_initpthread_attr_destroypthread_attr_*
    • 线程同步
      • 互斥锁pthread_mutex_*、读写锁pthread_rwlock_*、自旋锁pthread_spin_*
      • 条件变量pthread_cond_*
      • 屏障
      • POSIX信号量sem_*
    • 线程与信号pthread_sigmasksigwaitpthread_kill
    • 线程和进程pthread_atfork
  • I/O复用

    select poll轮询,epoll回调

    select poll索引就绪文件描述符复杂度为O(n),epoll为O(1)

    epoll适用于连接数量多,活动连接少的情况

    • select
    • poll
    • epoll:epoll_createepoll_ctlepoll_wait
  • 文件I/O

    • 基本I/O:openreadwritelseekclosedup2/dupsyncfcntl
    • 高级I/O:分散读集中写readv/writev,存储映射mmap/munmap,linux零拷贝sendfile/splice/tee
    • 标准I/O
  • 文件其他操作

    • 获取文件信息:stat
    • 访问权限:accessumaskchmod
    • 所有者:chown
    • 目录操作:mkdiropendirreaddirclosedirrmdir
    • 文件操作:truncaterename(目录也适用)
    • 硬链接:linkunlink
    • 符号链接:symlinkreadlink
  • 信号

    • 发送信号:kill
    • 处理信号:signalsigaction
    • 信号集:sigemptysetsigfillsetsigaddsetsigdelsetsigismembersigprocmasksigpending
    • 信号的文件描述符:signalfd
  • 编程规范

    • 日志:syslogopenlogsetlogmaskcloselog
    • 用户和组:真实用户uid,有效用户euid,真实组gid,有效组egid,设置用户/组ID
    • 进程关系:进程组pgid,会话sid
    • 资源限制:getrlimit
    • 进程目录:getcwdchdirchroot
    • 守护进程:daemon

网络编程

  • socket

    • 4个字节序转换函数htonlhtonsntohlntohs(n:network h:host)

    • 3种常用socket地址格式sockaddrsockaddr_insockaddr_in6

    • 2个ip地址转换(书写型和计算机使用型)函数inet_ntopinet_pton (适用ipv4和ipv6)

    • tcp服务端:socketbindlistenacceptclose/shutdown

      tcp客户端:socketconnectclose/shutdown

    • 4组读写函数read/writerecv/sendrecvfrom/sendtorecvmsg/sendmsg

    • 获取socket绑定地址getsocknamegetpeername

    • socket选项setsockoptgetsockopt

    • 带外数据sockatmark

    • 地址查询函数getaddrinfofreeaddrinfogetnameinfogetnameinfo

  • 服务器编程框架

    • I/O处理单元
      • 五种I/O模型:阻塞I/O、非阻塞I/O、信号驱动I/O、异步I/O、I/O多路复用(select、poll、epoll)
      • 两种事件处理模式:Reactor、Proactor
    • 逻辑单元
      • 两种并发模式:半同步/半异步模式、领导者/追随者模式
      • 高效逻辑处理方式:有限状态机
    • 存储单元

琐碎知识:

  • 带外数据
    • 发送/接收带外数据,用MSG_OOB标志的send/recv
    • 检测带外数据的两种方式:SIGURG信号,IO复用的异常事件
    • 带外数据的定位:sockatmark
  • 四种定时方法
    • socket选项SO_RCVTIMEO和SO_SNDTIMEO
    • SIGALRM信号
    • I/O复用系统调用的超时参数
    • 时间文件化timerfd
  • 常见信号含义
    • SIGCHLD:子进程终止时向父进程发送
    • SIGPIPE:进程向读端被关闭的管道或socket连接中写数据,默认杀死进程

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published