socket函数

2023-05-16


转自:http://blog.csdn.net/guoping16/article/details/6584382


1.   基本套接字函数

(1)socket函数原型

socket(建立一个socket文件描述符)

所需头文件

#include <sys/types.h>       

#include <sys/socket.h>

函数说明

建立一个socket文件描述符

函数原型

int socket(int domain, int type, int protocol)

函数传入值

domain

AF_INET:IPv4协议

AF_INET6:IPv6协议

AF_LOCAL:Unix域协议

AF_ROUTE:路由套接口

AF_KEY:密钥套接口

type

SOCKET_STREAM:双向可靠数据流,对应TCP

SOCKET_DGRAM:双向不可靠数据报,对应UDP

SOCKET_RAW:提供传输层以下的协议,可以访问内部网络接口,例如接收和发送ICMP报文

protocol

type为SOCKET_RAW时需要设置此值说明协议类型,其他类型设置为0即可

函数返回值

成功:socket文件描述符

失败:-1,失败原因存于error中

 

表18-1列出了当进行socket调用时,中协议簇(domain)与类型(type)可能产生的组合。

表18-1 socket中协议簇(domain)与类型(type)组合表

 

AF_INET

AF_INET6

AF_LOCAL

AF_ROUTE

AF_KEY

SOCK_STREAM

TCP

TCP

Yes

 

 

SOCK_DGRAM

UDP

UDP

Yes

 

 

SOCK_RAW

IPv4

IPv6

 

Yes

Yes

 

(2)bind函数原型

bind(将一个本地协议地址与socket文件描述符联系起来)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

将一个协议地址与socket文件描述符联系起来

函数原型

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)

函数传入值

sockfd

socket文件描述符

addr

my_addr指向sockaddr结构,该结构中包含IP地址和端口等信息

addrlen

sockaddr结构的大小,可设置为sizeof(struct sockaddr)

函数返回值

成功:0

失败:-1,失败原因存于error中

利用bind函数绑定地址时,可以指定IP地址和端口号,也可以指定其中之一,甚至一个也不指定。可以使用通配地址INADDR_ANY(为宏定义,其值等于0),它通知内核选择IP地址。表18-2列出了设置socket地址结构的几种方式,但在实际中,绑定的端口号都需要指定。

         表18-2 设置socket地址结构的几种方式       

进程指定

说 明

IP地址

端口

通配地址INADDR_ANY

0

内核自动选择IP地址和端口号

通配地址INADDR_ANY

非0

内核自动选择IP地址,进程指定端口号

本地IP地址

0

进程指定IP地址,内核自动选择端口号

本地IP地址

非0

进程指定IP地址和端口号

 

(3)listen函数原型

listen (等待连接)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

等待连接

函数原型

int listen(int sockfd, int backlog)

函数传入值

sockfd

监听socket文件描述符

backlog

套接字排队的最大连接个数

函数返回值

成功:0

失败:-1,失败原因存于error中

特别说明

对于监听socket文件描述符sockfd,内核要维护两个队列,分别为未完成连接队列和已完成连接队列,这两个队列之和不超过backlog

 

(4)connect函数原型

connect(建立socket连接)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

建立socket连接

函数原型

int connect(int sockfd, const struct sockaddr *serv_addr,

                   socklen_t addrlen)

函数传入值

sockfd

socket文件描述符

serv_addr

连接的网络地址和端口

addrlen

sockaddr结构的大小,可设置为sizeof(struct sockaddr)

函数返回值

成功:0

失败:-1,失败原因存于error中

附加说明

函数connect激发TCP的三路握手过程,出错返回有以下几种情况:

①     如果客户没有收到SYN分节的响应(总共75秒,这之间可能重发了若干次SYN),则返回ETIMEDOUT

②     如果对客户的SYN的响应是RST,则表明该服务器主机在指定的端口上没有进程在等待与之相连,函数返回错误ECONNREFUSED

③     如果客户发出的SYN在中间路由器上引发一个目的地不可达的ICMP错误,内核返回EHOSTUNREACH或ENETUNREACH错误(即ICMP错误)给进程

 

(5)accept函数原型

                accept(接受socket连接)

 

 

所需头文件

#include <sys/types.h>     

#include <sys/socket.h>

函数说明

接受socket连接,返回一个新的socket文件描述符,原socket文件描述符仍为listen函数所用,而新的socket文件描述符用来处理连接的读写操作

函数原型

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)

函数传入参数

sockfd: socket文件描述符

addrlen:addr的大小,可设置为sizeof(struct sockaddr)

函数传出参数

addr:填入远程主机的地址数据

函数返回值

成功:实际读取字节数

失败:-1,错误代码存放在error中

附加说明

①     accept函数由TCP服务器调用,为阻塞函数,从已完成连接的队列中返回一个连接;如果该对列为空,则进程进入阻塞等待

②     函数返回的套接字为已连接套接字,而监听套接字仍为listen函数所用

 

(6)close函数原型

close (关闭连接的socket文件描述符)

所需头文件

#include <unistd.h>

函数说明

关闭连接的socket文件描述符

函数原型

int close(int sockfd)

函数传入值

sockfd:socket文件描述符

函数返回值

成功:0

失败:-1,失败原因存于error中

附加说明

①     close函数默认功能是将套接字置为“已关闭”标记,并立即返回给进程,这个套接字不能再为该进程所用

②     正常情况下,close将引发四个分节终止序列,但在终止前将发送已排队的数据

③     如果套接字描述符访问计数在调用close后大于0(多个进程共享同一个套接字的情况下),则不会引发TCP终止序列(即不会发送FIN分节)

 

(7)shutdown函数原型

shutdown(终止socket通信)

所需头文件

#include <sys/socket.h>

函数说明

终止socket通信

函数原型

int shutdown(int s, int how)

函数传入值

s

socket文件描述符

how

0(SHUT_RD):关闭socket连接的读这一半,不再接收套接字中的数据且现留在收缓冲区的数据作废

1(SHUT_WR):关闭socket连接的写这一半(半关闭),但留在套接字发送缓冲区中的数据都会被发送,后跟TCP连接终止序列,不管访问计数是否大于0,此后将不能再执行对套接字的任何写操作

2(SHUT_RDWR):socket连接的读、写都关闭

函数返回值

成功:0

失败:-1,失败原因存于error中

 

(8)read函数原型

                read(从打开的socket文件流中读取数据)

 

 

所需头文件

#include <unistd.h>

函数说明

从打开的socket文件流中读取数据,这里仅说明此函数应用于socket的情况

函数原型

ssize_t read(int fd, void *buf ,size_t count)

函数传入参数

fd: socket文件描述符

count:最大读取字节数

函数传出参数

buf:读取数据的首地址

函数返回值

成功:实际读取字节数

失败:-1,错误代码存放在error中

附加说明

调用函数read从socket文件流中读取数据时,有如下几种情况:

①     套接字接收缓冲区接收数据,返回接收到的字节数

②     TCP协议收到FIN数据,返回0

③     TCP协议收到RST数据,返回-1,同时errno设置为ECONNRESET

④     进程阻塞过程中接收到信号,返回-1,同时errno设置为EINTR

 

(9)write函数原型

                 write(向socket文件流中写入数据)

 

 

所需头文件

#include <unistd.h>

函数说明

向socket文件流中写入数据,这里仅说明此函数应用于socket的情况

函数原型

ssize_t write (int fd,const void *buf,size_t count)

函数传入参数

 

fd: socket文件描述符

buf:写入数据的首地址

count:最大写入字节数

函数返回值

成功:实际写入的字节数

失败:-1,错误代码存放在error中

附加说明

调用函数write向socket文件流写数据时,有如下几种情况:

①        套接字发送缓冲区有足够空间,返回发送的字节数

②        TCP协议接收到RST数据,返回-1,同时errno设置为ECONNRESET

③        进程阻塞过程中接收到信号,返回-1,同时errno设置为EINTR

2.   高级套接字函数

recv和send函数提供了和read和write差不多的功能。不过它们提供了第四个参数来控制读写操作。

(1) send函数原型

send(通过socket文件描述符发送数据到对方)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

通过socket文件描述符发送数据到对方

函数原型

ssize_t send(int s, const void *buf, size_t len, int flags)

函数传入值

s

socket文件描述符

buf

发送数据的首地址

len

发送数据的长度

flags

0:此时功能同write,flags还可以设为以下标志的组合

MSG_OOB:发送带外数据

MSG_DONTROUTE:告诉IP协议,目的主机在本地网络,没有必要查找路由表

MSG_DONTWAIT:设置为非阻塞操作

MSG_NOSIGNAL:表示发送动作不愿被SIGPIPE信号中断

函数返回值

成功:实际发送的字节数

失败:-1,失败原因存于error中

 

(2) recv函数原型

recv(通过socket文件描述符从对方接收数据)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

通过socket文件描述符从对方接收数据

函数原型

ssize_t recv(int s, void *buf, size_t len, int flags)

函数传入值

s

socket文件描述符

len

可接收数据的最大长度

flags

0:此时功能同read,flags还可以设为以下标志的组合

MSG_OOB:接收带外数据

MSG_PEEK:查看数据标志,返回的数据并不在系统中删除,如果再次调用recv函数会返回相同的数据内容

MSG_DONTWAIT:设置为非阻塞操作

MSG_WAITALL:强迫接收到len大小的数据后才返回,除非有错误或有信号产生

函数传出值

buf

接收数据的首地址

函数返回值

成功:实际发送的字节数

失败:-1,失败原因存于error中

3.   套接字属性控制函数

系统提供getsockopt、setsockopt两函数获取和修改套接字结构中一些属性,通过修改这些属性,可以调整套接字的性能,进而调整应用程序的性能。

(1) getsockopt函数原型

getsockopt(获取套接字的属性)

所需头文件

#include <sys/types.h>   

#include <sys/socket.h>

函数说明

获取套接字的属性

函数原型

int getsockopt(int s, int level, int optname,

                      void *optval, socklen_t *optlen)

函数传入值

s

socket文件描述符

level

SOL_SOCKET:通用套接字选项

IPPROTO_IP:IP选项

IPPROTO_TCP:TCP选项

optname

访问的选项名,具体见表18-3

optlen

optval的长度

函数传出值

optval

取得的属性值

函数返回值

成功:0

失败:-1,失败原因存于error中

 

表18-3 套接字属性表

level(级别)

optname(选项名

说明

数据类型

SOL_SOCKET

 

SO_BROADCAST

允许发送广播数据

int

SO_DEBUG

允许调试

int

SO_DONTROUTE

不查找路由

int

SO_ERROR

获得套接字错误

int

SO_KEEPALIVE

保持连接

int

SO_LINGER

延迟关闭连接

struct linger

SO_OOBINLINE

带外数据放入正常数据流

int

SO_RCVBUF

接收缓冲区大小

int

SO_SNDBUF

发送缓冲区大小

int

SO_RCVLOWAT

接收缓冲区下限

int

SO_SNDLOWAT

发送缓冲区下限

int

SO_RCVTIMEO

接收超时

struct timeval

SO_SNDTIMEO

发送超时

struct timeval

SO_REUSERADDR

允许重用本地地址和端口

int

SO_TYPE

获得套接字类型

int

SO_BSDCOMPAT

与BSD系统兼容

int

IPPROTO_IP

 

IP_HDRINCL

在数据包中包含IP首部

int

IP_OPTINOS

IP首部选项

int

IP_TOS

服务类型

int

IP_TTL

生存时间

int

IPPRO_TCP

TCP_MAXSEG

TCP最大数据段的大小

int

CP_NODELAY

不使用Nagle算法

int

 

(2)setsockopt函数原型

setsockopt(设置套接字的属性)

所需头文件

#include <sys/types.h>   

#include <sys/socket.h>

函数说明

设置套接字的属性

函数原型

int setsockopt(int s, int level, int optname,

                      const void *optval, socklen_t optlen)

函数传入值

s

socket文件描述符

level

SOL_SOCKET:通用套接字选项

IPPROTO_IP:IP选项

IPPROTO_TCP:TCP选项

optname

设置的选项名,具体见表18-3

optval

设置的属性值

optlen

optval的长度

函数返回值

成功:0

失败:-1,失败原因存于error中

 

(3)getsockopt、setsockopt函数举例

sockopt.c源代码如下:

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

int main()

{

    int sockfd,optval,optlen = sizeof(int);

    int sndbuf = 0 ;

    int rcvbuf = 0 ;

    int flag;

    if((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)

    {

        perror("socket") ;

        return -1 ;

    }

    getsockopt(sockfd,SOL_SOCKET,SO_TYPE,&optval,&optlen);

    printf("optval = %d\n",optval);

    optlen = sizeof(sndbuf);

    flag = getsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&sndbuf,&optlen);

    printf("sndbuf=%d\n",sndbuf) ;

    printf("flag=%d\n",flag) ;

    sndbuf = 51200;   

    flag = setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&sndbuf, optlen);

    sndbuf=0 ;

    flag = getsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&sndbuf,&optlen);

    printf("sndbuf=%d\n",sndbuf) ;

    printf("flag=%d\n",flag) ;

    close(sockfd);

    return 0 ;

}

编译 gcc sockopt.c -o sockopt。

执行 ./sockopt, 执行结果如下:

optval = 1

sndbuf=16384

flag=0

sndbuf=102400

flag=0

4.   UDP读写函数

UDP套接字是无连接协议,必须使用sendto函数发送数据,必须使用recvfrom函数接收数据,发送时需指明目的地址。sendto函数与send功能基本相同,recvfrom与recv功能基本相同,只不过sendto函数和recvfrom函数参数中都带有对方地址信息,这两个函数是专门为UDP协议提供的。

(1)sendto函数原型

sendto(通过socket文件描述符发送数据到对方)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

通过socket文件描述符发送数据到对方,用于UDP协议

函数原型

ssize_t sendto(int s, const void *buf, size_t len, int flags,

                      const struct sockaddr *to, socklen_t tolen)

函数传入值

s

socket文件描述符

buf

发送数据的首地址

len

发送数据的长度

flags

0:默认方式发送数据,flags还可以设为以下标志的组合

MSG_OOB:发送带外数据

MSG_DONTROUTE:告诉IP协议,目的主机在本地网络,没有必要查找路由表

MSG_DONTWAIT:设置为非阻塞操作

MSG_NOSIGNAL:表示发送动作不愿被SIGPIPE信号中断

to

存放目的主机IP地址和端口信息

tolen

to的长度,可设置为sizeof(struct sockaddr)

函数返回值

成功:实际发送的字节数

失败:-1,失败原因存于error中

 

(2) recvfrom函数

recv(通过socket文件描述符从对方接收数据)

所需头文件

#include <sys/types.h>

#include <sys/socket.h>

函数说明

通过socket文件描述符从对方接收数据,用于UDP协议

函数原型

ssize_t recvfrom(int s, void *buf, size_t len, int flags,

                        struct sockaddr *from, socklen_t *fromlen)

函数传入值

s

socket文件描述符

len

可接收数据的最大长度

flags

0:默认方式接收数据,flags还可以设为以下标志的组合

MSG_OOB:接收带外数据

MSG_PEEK:查看数据标志,返回的数据并不在系统中删除,如果再次调用recv函数会返回相同的数据内容

MSG_DONTWAIT:设置为非阻塞操作

MSG_WAITALL:强迫接收到len大小的数据后才返回,除非有错误或有信号产生

fromlen

from的长度,可设置为sizeof(struct sockaddr)

函数传出值

buf

接收数据的首地址

from

存放发送方的IP地址和端口

函数返回值

成功:实际发送的字节数

失败:-1,失败原因存于error中

 摘录自《深入浅出Linux工具与编程》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket函数 的相关文章

  • IO多路复用之select、poll、epoll

    五种网络I O模型 如果使用多进程 多线程模式的话 创建进程和创建线程需要时间开销 在编写服务器客户端程序时 如果服务器性能不行而客户端太多时这种代价很大 试想如果有一种方法能够同时监听按键设备 串口设备和网络socket的事件 可读 可写
  • TCP实现socket通信(python)

    socket简介 UDP实现socket通信 python TCP实现socket通信 python 1 套接字工作流程 服务器端先初始化Socket 建立一个套接字 与端口绑定 bind 用 bind 函数来绑定一个端口号和 IP 地址
  • 优雅地断开TCP连接

    socket关闭 close 和shutdown 的差异 对于一个tcp连接 在c语言里一般有2种方法可以将其关闭 close sock fd 或者 shutdown sock fd 多数情况下这2个方法的效果没有区别 可以互换使用 除了
  • ‘windows socket error:由于目标机器积极拒绝,无法连接。(10061),on API 'connect'的错误?

    1 gt 连接时出现 windows socket error 10061 on API connect 是SOCKET没有启动 SCKTSRVR EXE 或者无法连接到服务器 端口等 使用socketconnect很简单 只要在应用服务器
  • 带外数据

    定义带 外 数据 想 像一下在银行人们排起队等待处理他们的帐单 在这个队伍中每个人最后都会移到前面由出纳员进行服务 现在想像一下一个走入银行 越过整个队伍 然后用枪抵 住出纳员 这个就可以看作为带 外 数据 这个强盗越过整个队伍 是因为这把
  • WebSocket和HTTP的区别及原理

    HTTP协议 HTTP是单向的 客户端发送请求 服务器发送响应 举例来说 当客户端向服务器发送请求时 该请求以HTTP或HTTPS的形式发送 在接收到请求后 服务器会将响应发送给客户端 每个请求都与一个对应的响应相关联 在发送响应后客户端与
  • unity游戏开发-socket网络通信

    本篇主要是分享基于unity的客户端socket网络通信方案 关于服务器的c socekt搭建放在了这里 基于C 的Tcp服务端通信 其中关于socekt粘包断包的处理放在这里分享了 C socket粘包断包处理 目录 整体设计 TcpCl
  • Socket -- udp

    接收者 完成System out println UDPProvider Started 作为接收者 指定一个端口用于数据接收 DatagramSocket ds new DatagramSocket 20000 构建接收实体 final
  • Websocket(一)——原理及基本属性和方法

    初次接触 WebSocket 的人 都会问同样的问题 我们已经有了 HTTP 协议 为什么还需要另一个协议 它能带来什么好处 答案很简单 因为 HTTP 协议有一个缺陷 通信只能由客户端发起 举例来说 我们想了解今天的天气 只能是客户端向服
  • Socket传输文件/传输图片(Windows)

    利用UDP socket 来传输文件与图片 流程图如下 主要流程 1 client端发送command请求 上传数据或者下载数据 选择文件路径 2 server端应答 start代表开始传输 no代表拒绝 3 fopen打开文件进行读取 f
  • linux进程间通信---本地socket套接字(二)---多进程实现一个server对应多个client

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 想要获取完整源码的 关注公众号后回复 socket2 即
  • Java实战项目(一)---编写聊天室程序

    刚开始学java 参考 java从入门到精通 这本书 学到网络程序设计基础这一章节 尤其与其他计算机进行通信 觉得还挺有意思的 所有深入地试试做一个小程序 聊天室程序 在代码中加入我自己的理解和困惑 希望能和大家一起探讨 每行的代码基本都有
  • websocket详解

    之前利用websocket以及jQuery做了一个聊天通讯应用 最近在总结整个过程中的一些问题 也借此机会聊聊websocket协议 webSocket本身不存在跨域问题 所以可以利用webSocket来进行非同源之间的通信 webSock
  • Java实现一个简单的命令行聊天程序

    Socket编程 Java实现 客户端 package net import java io BufferedReader import java io InputStreamReader import java io PrintWrite
  • node socket 简易聊天室

    服务端 const net require net const server net createServer 用户列表 let clients 监听连接 server on connection client gt client on d
  • AF_INET和PF_INET的区别

    在写网络程序的时候 建立TCP socket一般是这样的 sock socket PF INET SOCK STREAM 0 然后在绑定本地地址或连接远程地址时需要初始化sockaddr in结构 其中指定address family时一般
  • socket连接超时问题

    一部分 把CSDN与中文yahoo翻了底朝天 也没找到如何设置socket的连接超时的满意方法 问此问题的兄弟已有一大堆 这里偶就讲一下win下如何设置socket的connect超时 设置connect的超时很简单 CSDN上也有人提到过
  • c#Socket 异步通讯(客户端与服务端)

    c Socket 异步通讯 多个客户端与服务端 最近公司有个项目 涉及到的通讯对象有点多 就拿其中一个库的通讯来说就用到了3个PLC 这里就涉及了一个服务器与多个客户端之间的通讯了 同时上位机既需要做客户端 也需要做服务端 因为跟PLC之间
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • linux send recv函数详解

    2009 05 10 21 55 int send SOCKET s const char FAR buf int len int flags 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据 客户程序一般用sen

随机推荐

  • STM32启动文件详解

    先在RAM中分配系统使用的栈 xff0c RAM的起始地址为0x2000 0000 然后在RAM中分配变量使用的堆 然后在CODE区 flash 分配中断向量表 xff0c flash的起始地址为0x0800 0000 xff0c 该中断向
  • C语言细节之定义与声明

    什么是定义什么是声明 xff0c 似乎这俩个东西一样但是又有所区别 xff0c 思考一下 xff0c 如果你不能直接说出这二者的根本区别 xff0c 那么本文对你还是有点用处的 首先什么是定义 xff1f C 43 43 Primer 第四
  • 关于数据存储大小端模式的C语言题目

    int main int a 5 61 1 2 3 4 5 int ptr1 61 int amp a 43 1 int ptr2 61 int int a 43 1 printf 34 x x 34 ptr1 1 ptr2 return
  • 窥探引用和指针

    C语言面试题里面经常会出现一道题目 xff1a 向某个指定的内存地址写入特定的数据 xff0c 譬如向0x1234写入100 xff0c 做法如下 int 0x1234 61 100 解释一下就是将0x1234利用 int 强制转换为地址
  • STM32F101xxT6中VBAT 管脚上的怪现象

    转自 xff1a http bbs elecfans com forum php mod 61 viewthread amp tid 61 458808 amp extra 61 问题 xff1a 问题由某 UPS 制造公司提出 其工程师在
  • ST-LINK接口定义

    ST LINK接口定义 https www cnblogs com jieruishu p 9980350 html ST LINKIII管脚定义及接法 xff1a ST LINK IIILED灯三种状态含义 xff1a 常亮 xff1a
  • 罗德里格斯公式推导

    罗德里格斯公式推导 第一部分 向量 v 61 v x v
  • Ubuntu中的vi

    Windows中的常用编辑器 xff0c 如自带的notepad 比较好用的notepad 43 43 xff0c UltraEditor xff0c SlickEditor Linux中常用编辑器 xff0c 自带的最古老的vi 比较好用
  • 关于C++中的友元函数的总结

    转载自 xff1a http www cnblogs com BeyondAnyTime archive 2012 06 04 2535305 html 关于C 43 43 中的友元函数的总结 1 友元函数的简单介绍 1 1为什么要使用友元
  • 拷贝构造函数

    拷贝构造函数是重载构造函数的一种重要形式 xff0c 它的功能是使用一种已经存在的对象去初始一个新创建的同类对象 xff0c 它可以将一个已有对象的数据成员的值拷贝给正在创建的另一个同类的对象 拷贝构造函数与类同名 xff0c 没有返回值
  • cp: omitting directory ‘sp/’

    在linux中使用命令复制文件夹的时候出现的错误 xff1a cp omitting directory sp 解决办法 xff1a 使用递归拷贝 xff0c 在cp命令后面加上 r参数 xff0c 形如 xff1a cp r sp ica
  • LDR和ADR

    转自 xff1a https www douban com note 331036776 ARM汇编有ldr指令以及ldr adr伪指令 xff0c 他门都可以将标号表达式作为操作数 xff0c 下面通过分析一段代码以及对应的反汇编结果来说
  • 在显示屏上显示的数字的方法

    在现实屏上显示的数字的时候经常需要对数据进行分解 xff0c 得到数据 的每一位再依次显示 xff0c 方法有很多种 xff0c 下面介绍经常用到的3种方法 第一种方法 xff1a 不断的利用取整运算与取余运算得到每一位 void disp
  • 可变参数列表的简单实现

    使用可变参数列表实现一个sum函数 include lt stdio h gt define AUPBND sizeof int 1 define ADNBND sizeof int 1 define bnd X bnd sizeof X
  • 函数指针实例

    include lt stdio h gt void fun1 void printf 34 I 96 m fun1 n 34 void fun2 void printf 34 I 96 m fun2 n 34 void fun3 void
  • makefile小试牛刀

    使用make编译两个 c文件 div span style font size 14px a c void fun1 void int main fun1 return 0 span div div span style font size
  • 线程,进程,程序的区别

    转载自 xff1a https mp weixin qq com s O6 cZ9t8aJUMyeb7TbcbTQ 任务是代码运行的一个映象 xff0c 从系统的角度看 xff0c 任务是竞争系统资源的最小运行单元 任务可以使用或等待CPU
  • ubuntu14.04 samba服务器安装配置

    Data 2016 12 19 Author cjh Theme samba install andconfiguration 在介绍如何安装配置samba之前 xff0c 先简单介绍linux中两个命令的区别分别是update和upgra
  • 在数组中进行图形绘制

    include lt stdio h gt define k 2 43 1 define 2 define s 0 static unsigned short stop 61 s k k k k k k k s k k k k k k k
  • socket函数

    转自 xff1a http blog csdn net guoping16 article details 6584382 1 基本套接字函数 xff08 1 xff09 socket函数原型 socket 建立一个socket文件描述符