[国嵌攻略][070-095][Linux编程函数手册]

时间:2023-03-09 19:36:34
[国嵌攻略][070-095][Linux编程函数手册]

第1类 时间编程类

1.1 获取日历时间

1.1.1 函数名

time

1.1.2 函数原形

time_t time(time_t *t)

1.1.3 函数功能

返回日历时间

1.1.4 所属头文件

<time.h>

1.1.5 返回值

成功:日历时间失败:-1

1.1.6 参数说明

t:不为空的情况下保存返回值

 

1.2 获取格林威治时间

1.2.1 函数名

gmtime

1.2.2 函数原形

struct tm *gmtime(const time_t *timep)

1.2.3 函数功能

将参数timep所指定的日历时间转化为世界标志时间

1.2.4 所属头文件

<time.h>

1.2.5 返回值

成功:返回世界标准时间,以struct tm形式存储

struct tm {

               int tm_sec;         /* seconds */

               int tm_min;         /* minutes */

               int tm_hour;        /* hours */

               int tm_mday;        /* day of the month */

               int tm_mon;         /* month */

               int tm_year;        /* year */

               int tm_wday;        /* day of the week */

               int tm_yday;        /* day in the year */

               int tm_isdst;       /* daylight saving time */

           };

1.2.6 参数说明

timep:待转换的时间

 

1.3 获取本地时间

1.3.1 函数名

localtime

1.3.2 函数原形

struct tm *localtime(const time_t *timep)

1.3.3 函数功能

将参数timep所指向的日历时间转化为本地时间

1.3.4 所属头文件

<time.h>

1.3.5 返回值

成功:返回以struct tm格式存储的本地时间失败:NULL

1.3.6 参数说明

timep:指向待转化的日历时间

1.4 以字符串方式显示时间

1.4.1 函数名

asctime

1.4.2 函数原形

char *asctime(const struct tm *tm)

1.4.3 函数功能

struct tm格式的时间转化为字符串

1.4.4 所属头文件

<time.h>

1.4.5 返回值

字符串方式显示的时间

1.4.6 参数说明

tm:待转化的tm格式时间

 

1.5 获取高精度时间

1.5.1 函数名

gettimeofday

1.5.2 函数原形

int gettimeofday(struct timeval *tv, struct timezone *tz)

1.5.3 函数功能

获取高精度的时间

1.5.4 所属头文件

<sys/time.h>

1.5.5 返回值

成功:0 失败:-1

1.5.6 参数说明

tv:保存从1970.1.1.0:0:0到现在经历的秒数和微妙数

struct timeval {

time_t      tv_sec;     /* seconds */

suseconds_t tv_usec;    /* microseconds */

};

tzone:通常为空

struct timezone {

int tz_minuteswest;   /* minutes west of Greenwich */

int tz_dsttime;       /* type of DST correction */

};

 

 

 

 

 

 

 

 

 

 

 

第2类 系统调用文件编程类

2.1 打开文件

2.1.1 函数名

open

2.1.2 函数原形

int open(const char *pathname, int flags)

int open(const char *pathname, int flags, mode_t mode)

2.1.3 函数功能

打开或者创建一个文件

2.1.4 所属头文件

<sys/types.h> <sys/stat.h> <fcntl.h>

2.1.5 返回值

成功:文件描述符失败:-1

2.1.6 参数说明

pathname:要打开的文件名(含路径)

flags:文件打开的标志

-O_RDONLY:以只读方式打开文件

-O_WRONLY:以只写方式打开文件

-O_RDWR:以可读可写方式打开文件

-O_APPEND:以追加方式打开文件

-O_CREAT:当打开的文件不存在的时候,创建该文件

mode:一定是在flags中使用了-O_CREAT标志,mode记录待创建的访问权限访问

 

2.2 创建文件

2.1.1 函数名

creat

2.1.2 函数原形

int creat(const char *pathname, mode_t mode)

2.1.3 函数功能

创建一个文件,并以只写的方式打开该文件

2.1.4 所属头文件

<sys/types.h> <sys/stat.h> <fcntl.h>

2.1.5 返回值

成功:文件描述符失败:-1

2.1.6 参数说明

pathname:创建的文件名(含路径)

mode:创建文件的读写权限

 

2.3 关闭文件

2.3.1 函数名

close

2.3.2 函数原形

int close(int fd)

2.3.3 函数功能

关闭一个打开的文件

2.3.4 所属头文件

<unistd.h>

2.3.5 返回值

成功:0 失败:-1

2.3.6 参数说明

fd:待关闭的文件描述符

 

2.4 读文件

2.4.1 函数名

read

2.4.2 函数原形

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

2.4.3 函数功能

从一个打开的文件中读取数据

2.4.4 所属头文件

<unistd.h>

2.4.5 返回值

成功:返回读取的字节数失败:-1

2.4.6 参数说明

fd:要读取数据的文件的描述符

count:希望读取的字节数

buf:读取来的数据存到buf指向的空间

 

2.5 写文件

2.5.1 函数名

write

2.5.2 函数原形

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

2.5.3 函数功能

向一个打开文件写入数据

2.5.4 所属头文件

<unistd.h>

2.5.5 返回值

成功:写入到文件里的字节数失败:-1

2.5.6 参数说明

fd:要写入数据的文件的描述符

buf:要写入数据的存放位置

count:写入数据的字节数

 

2.6 定位文件

2.6.1 函数名

lseek

2.6.2 函数原形

off_t lseek(int fd, off_t offset, int whence)

2.6.3 函数功能

重新定位文件的读写位置

2.6.4 所属头文件

<sys/types.h> <unistd.h>

2.6.5 返回值

成功:返回移动后的文件指针距离文件头的位置失败:-1

2.6.6 参数说明

fd:指定要操作的文件的描述符

offset:相对偏移,正数为向后移动,负数为向前移动

whence:SEEK_SET,相对于文件头偏移offsetSEEK_CUR,相对于当前位置偏于offsetSEEK_END,相对于文件尾偏移offset

 

2.7 复制文件描述符

2.7.1 函数名

dup

2.7.2 函数原形

int dup(int oldfd)

2.7.3 函数功能

复制一个文件描述符

2.7.4 所属头文件

<unistd.h>

2.7.5 返回值

成功:返回新的文件描述符失败:-1

2.7.6 参数说明

oldfd:待复制的老的文件描述符

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第3类 库函数文件编程类

3.1 打开文件

3.1.1函数名

fopen

3.1.2 函数原形

FILE *fopen(const char *path, const char *mode)

3.1.3 函数功能

打开文件

3.1.4 所属头文件

<stdio.h>

3.1.5 返回值

成功:返回文件指针失败:NULL

3.1.6 参数说明

path:指定的打开的文件的名字(含路径)

mode:文件打开模式。”r”以只读方式打开;”r+”以可读可写方式打开;”w”以可写方式打开;”w+”以可读可写方式打开,如果文件不存在则创建文件,否则清空文件;”a”以追加写的方式打开文件;”a+”以追加写并且可读的方式打开文件,如果文件不存在则创建文件

3.2 关闭文件

3.2.1 函数名

fclose

3.2.2 函数原形

int fclose(FILE *fp)

3.2.3 函数功能

关闭文件

3.2.4 所属头文件

<stdio.h>

3.2.5 返回值

成功:0 失败:EOF

3.2.6 参数说明

fp:待关闭的文件指针

 

3.3 读文件

3.3.1 函数名

fread

3.3.2 函数原形

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

3.3.3 函数功能

从文件中读取数据

3.3.4 所属头文件

<stdio.h>

3.3.5 返回值

成功:返回成功读取到的数据量失败:0

3.3.6 参数说明

ptr:指向读取出来后的数据保存的位置

size:每块数据的大小

nmemb:读取的数据块数

stream:指向要读取的文件

 

3.4 写文件

3.4.1 函数名

fwrite

3.4.2 函数原形

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

3.4.3 函数功能

向文件中写入数据

3.4.4 所属头文件

<stdio.h>

3.4.5 返回值

成功:返回成功写入的数据量失败:0

3.4.6 参数说明

ptr:存放要写入文件的数据

size:每块数据的大小

nmemb:写入的数据块数

stream:要写入数据的文件指针

 

3.5 定位文件

3.5.1 函数名

fseek

3.5.2 函数原形

int fseek(FILE *stream, long offset, int whence)

3.5.3 函数功能

设置文件的位置指针

3.5.4 所属头文件

<stdio.h>

3.5.5 返回值

成功:0 失败:-1

3.5.6 参数说明

stream:指定要操作的文件的描述符

offset:相对偏移,正数为向后移动,负数为向前移动

whence:SEEK_SET,相对于文件头偏移offsetSEEK_CUR,相对于当前位置偏于offsetSEEK_END,相对于文件尾偏移offset

 

 

 

 

 

 

第4类 多进程编程类

4.1 获取进程号

4.1.1 函数名

getpid

4.1.2 函数原形

Pid_t getpid()

4.1.3 函数功能

返回调用该函数的进程的id

4.1.4 所属头文件

<sys/types.h> <unistd.h>

4.1.5 返回值

调用该函数的id

4.1.6 参数说明

 

4.2 创建进程

4.2.1 函数名

fork

4.2.2 函数原形

pid_t fork(void)

4.2.3 函数功能

创建一个子进程

4.2.4 所属头文件

<unistd.h>

4.2.5 返回值

成功:在父进程中返回子进程的pid,在子进程中返回0

失败:-1

4.2.6 参数说明

无参数

 

4.2 创建进程

4.2.1 函数名

vfork

4.2.2 函数原形

pid_t vfork(void)

4.2.3 函数功能

创建一个子进程,并且阻塞父进程。与父进程共享数据

4.2.4 所属头文件

<sys/types.h>

<unistd.h>

4.2.5 返回值

成功:在父进程中返回子进程的pid,在子进程中返回0

失败:-1

4.2.6 参数说明

无参数

 

4.2 结束进程

4.2.1 函数名

exit

4.2.2 函数原形

void exit(int status)

4.2.3 函数功能

结束进程,子进程只能用exit()结束,父进程可以用exit()return结束

4.2.4 所属头文件

<stdlib.h>

4.2.5 返回值

4.2.6 参数说明

status0表示正常结束 1表示异常结束

 

4.3 进程等待

4.3.1 函数名

wait

4.3.2 函数原形

pid_t wait(int *status)

4.3.3 函数功能

挂起调用它的进程,直到其子进程结束

4.3.4 所属头文件

<sys/types.h> <sys/wait.h>

4.3.5 返回值

成功:返回终止的那个子进程的id 失败:-1

4.3.6 参数说明

status:记录子进程的退出状态

 

4.4 执行程序

4.4.1 函数名

execl

4.4.2 函数原形

int execl(const char *path, const char *arg, ...)

4.4.3 函数功能

运行可执行文件

4.4.4 所属头文件

<unistd.h>

4.4.5 返回值

成功:不返回失败:返回

4.4.6 参数说明

path:要运行的可执行文件路径

arg:可执行文件运行需要的参数,以NULL来结束

 

第5类 管道通讯编程类

5.1 创建无名管道

5.1.1 函数名

pipe

5.1.2 函数原形

int pipe(int pipefd[2])

5.1.3 函数功能

创建无名管道

5.1.4 所属头文件

<unistd.h>

5.1.5 返回值

成功:0 失败:-1

5.1.6 参数说明

pipefd[0]:读端fd

pipefd[1]:写端fd

 

5.2 创建有名管道

5.2.1 函数名

mkfifo

5.2.2 函数原形

int mkfifo(const char*pathname, mode_t mode)

5.2.3 函数功能

创建fifo文件(有名管道)

5.2.4 所属头文件

<sys/types.h> <sys/stat.h>

5.2.5 返回值

成功:0 失败:-1

5.2.6 参数说明

pathname:要创建的fifo文件的名字(带路径)

mode:创建的fifo文件的访问权限

 

5.3 删除有名管道

5.3.1 函数名

unlink

5.3.2 函数原形

int unlink(const char* pathname)

5.3.3 函数功能

删除文件

5.3.4 所属头文件

<unistd.h>

5.3.5 返回值

成功:0 失败:-1

5.3.6 参数说明

pathname:用来指明要删除的文件名字(含路径)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第6类 信号通讯编程类

6.1 发送信号

6.1.1 函数名

kill

6.1.2 函数原形

int kill(pid_t pid, int sig)

6.1.3 函数功能

向进程发送信号

6.1.4 所属头文件

<sys/types.h> <signal.h>

6.1.5 返回值

成功:0 失败:-1

6.1.6 参数说明

pid:pid>0,pid参数指向接受信号的进程

sig:指明要发送的信号

6.2 处理信号

6.2.1 函数名

signal

6.2.2 函数原形

typedef void(*sighandler_t)(int)

sighandler_t signal(int signum, sighandler_t handler)

6.2.3 函数功能

设置信号的处理方式

6.2.4 所属头文件

<signal.h>

6.2.5 返回值

成功:返回处理函数的指针失败:SIG_ERR

6.2.6 参数说明

signum:要处理的信号

handler:对应信号的处理方式,可以取值,SIG_IGN,忽视这个信号(不处理);SIG_DFL,交给内核来处理;用户自定义的函数,交给用户自定义的函数

第8类 信号量编程类

8.1 创建/打开信号量集合

8.1.1 函数名

semget

8.1.2 函数原形

int segmet(key_t key, int nsems, int semflg)

8.1.3 函数功能

获取信号量集合的标示符

key所指定的信号量不存在的时候,并且semflg包含了IPC_CREAT,这时会创建一个信号量集合

8.1.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/sem.h>

8.1.5 返回值

成功:返回信号量集合的标示符失败:-1

8.1.6 参数说明

key:键值

nsems:创建的信号量集合里面包含的信号量数目

semflg:标志,可以取IPC_CREAT

 

8.2 操作信号量

8.2.1 函数名

semop

8.2.2 函数原形

int semop(int semid, struct sembuf *sops, unsigned nsops)

8.2.3 函数功能

操作信号量

8.2.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/sem.h>

8.2.5 返回值

成功:0 失败:-1

8.2.6 参数说明

semid:要操作的信号量集合的标示符

sops:对哪个信号量执行什么样的操作,为要操作信号量数组

struct sembuf{

unsigned short sem_num;  /* semaphore number */

short          sem_op;   /* semaphore operation */

short          sem_flg;  /* operation flags */

}

sem_op如果是正数表示释放信号量,如果是负数表示获取信号量;sem_flg一般设置为SEM_UNDO,当程序发生错误时,系统帮助释放信号量

nsops:要操作多少个信号量

 

8.3 操作信号量

8.3.1 函数名

semctl

8.3.2 函数原形

int semclt(int semid, int semnum, int cmd, ...)

8.3.3 函数功能

操作信号量

8.3.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/sem.h>

8.3.5 返回值

成功:所请求的相应的值失败:-1

8.3.6 参数说明

semid:要操作的信号量集合的标示符

semnum:要操作多少个信号量

cmd:对信号量执行什么样的操作

GETVALthe value of semval.

SETVALSet  the  value  of  semval  to  arg.val

 

 

 

 

 

 

第9类 共享内存编程类

9.1创建/获取共享内存

9.1.1 函数名

shmget

9.1.2 函数原形

int shmget(key_t key, size_t size, int shmflg)

9.1.3 函数功能

创建或者获取共享内存,并返还其描述符id

9.1.4 所属头文件

<sys/ipc.h> <sys/shm.h>

9.1.5 返回值

成功:返还创建或者获取到的共享内存的描述符

失败:-1

9.1.6 参数说明

key:共享内存的键值

size:共享内存的大小

shmflg:打开标志,如果使用了IPC_CREAT,则会新创建一个共享内存

9.2映射共享内存

9.2.1 函数名

shmat

9.2.2 函数原形

void *shmat(int shmid, const void *shmaddr, int shmflg)

9.2.3 函数功能

shmid所指定的共享内存映射到进程的地址空间里

9.2.4 所属头文件

<sys/types.h> <sys/shm.h>

9.2.5 返回值

成功:返回映射到进程空间之后的内存地址

失败:-1

9.2.6 参数说明

shmid:要映射的共享内存的描述符

shmaddr:指定映射之后的地址,但是一般情况都让该参数为NULL,表明让Linux系统自动选择映射地址

shmflg:标志

 

9.3脱离共享内存

9.3.1 函数名

shmdt

9.3.2 函数原形

int shmdt(const void *shmaddr)

9.3.3 函数功能

从进程地址空间中,断掉与共享内存的联系

9.3.4 所属头文件

<sys/types.h> <sys/shm.h>

9.3.5 返回值

成功:0 失败:-1

9.3.6 参数说明

shmaddr:要断开的共享内存的映射地址

9.4删除共享内存

9.4.1 函数名

shmctl

9.4.2 函数原形

int shmctl(int shmid, int cmd, struct shmid_ds *buf)

9.4.3 函数功能

控制共享内存

9.4.4 所属头文件

<sys/ipc.h> <sys/shm.h>

9.4.5 返回值

成功:根据不同操作返回不同的值

失败:-1

9.4.6 参数说明

shmid:要控制的共享内存的id

cmd:决定执行什么样的控制操作,如IPC_RMID(表示删除)

buf:获取Linux中描述共享内存的struct shmid_ds结构,基本不使用

 

 

 

第10类 消息队列编程类

10.1创建/打开消息队列

10.1.1 函数名

 msgget

10.1.2 函数原形

int msgget(key_t key, int msgflg)

10.1.3 函数功能

打开或创建消息队列

10.1.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/msg.h>

10.1.5 返回值

成功:返回消息队列的id

失败:-1

10.1.6 参数说明

key:键值

msgflg;打开标志,IPC_CREAT:表明新创建一个消息队列

 

10.2发送数据

10.2.1 函数名

msgsnd

10.2.2 函数原形

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)

10.2.3 函数功能

发送消息到消息队列

10.2.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/msg.h>

10.2.5 返回值

失败:-1

成功:0

10.2.6 参数说明

msqid:消息队列的id

msgp:指向要发送的数据

msgsz:消息的长度

msgflg:标志

消息结构:

struct msgbuf {

long mtype;    /* message type, must be > 0 */

char mtext[1]; /* message data */

};

 

10.3接收消息

10.3.1 函数名

msgrcv

10.3.2 函数原形

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)

10.3.3 函数功能

从消息队列中接收消息

10.3.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/msg.h>

10.3.5 返回值

失败:-1

成功:返回实际结束到的消息的数据长处

10.3.6 参数说明

msqid:消息队列的id

msgp:存放取出的消息

msgsz:希望取到消息的最大长度

msgtyp:消息的类型。

=0:直接忽略类型,直接取消息队列中的第一天消息;

>0:取消息队列中类型等于msgtpy的第一条消息;

<0:取类型比msgtpy的绝对值要小或者等于的消息,如果有多条消息满足该条件,则取类型最小的一条;

msgflg:标志

 

10.4删除消息队列

10.4.1 函数名

msgctl

10.4.2 函数原形

int msgctl(int msqid, int cmd, struct msqid_ds *buf)

10.4.3 函数功能

控制消息队列

10.4.4 所属头文件

<sys/types.h> <sys/ipc.h> <sys/msg.h>

10.4.5 返回值

失败:-1

成功:0

10.4.6 参数说明

msqid:消息队列的id

cmd:对消息队列执行的操作命令,IPC_RMID用于删除消息队列

buf:获取内核中的struct msqid_ds,通常不用

 

 

 

第11类 多线程编程类

11.1创建线程

11.1.1 函数名

pthread_create

11.1.2 函数原形

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)

11.1.3 函数功能

创建新的线程

11.1.4 所属头文件

<pthread.h> 特别注意:编译时必须链接pthread

11.1.5 返回值

成功:0 失败:错误编码

11.1.6 参数说明

thread:新创建的线程的ID

attr:待创建线程的属性,一般为NULL

start_routine:线程的入口函数

arg:线程入口函数的参数,可以为NULL

 

11.2等待线程结束

11.2.1 函数名

pthread_join

11.2.2 函数原形

int pthread_join(pthread_t thread, void **retval)

11.2.3 函数功能

用于等待线程结束

11.2.4 所属头文件

<pthread.h> 特别注意:编译时必须链接pthread

11.2.5 返回值

成功:0 失败:错误编号

11.2.6 参数说明

thread:要等待结束的线程的ID

retval:用于保存线程退出时的状态,一般为NULL

 

11.3退出线程

11.3.1 函数名

pthread_exit

11.3.2 函数原形

void pthread_exit(void *retval)

11.3.3 函数功能

结束线程

11.3.4 所属头文件

<pthread.h> 特别注意:编译时必须链接pthread

11.3.5 返回值

void

11.3.6 参数说明

retval:保存返回值

 

11.4线程互斥锁初始化

11.4.1 函数名

phtread_mutex_init

11.4.2 函数原形

int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)

11.4.3 函数功能

用来初始化互斥锁

11.4.4 所属头文件

<pthread.h>

11.4.5 返回值

成功:0 失败:错误编号

11.4.6 参数说明

mutex:要去初始化的互斥锁的指针

attr:初始化的属性,一般为NULL

 

11.5获取线程互斥锁

11.5.1 函数名

phtread_mutex_lock

11.5.2 函数原形

int pthread_mutex_lock(pthread_mutex_t *mutex)

11.5.3 函数功能

用来锁住互斥锁

11.5.4 所属头文件

<pthread.h>

11.5.5 返回值

成功:0 失败:错误编号

11.5.6 参数说明

mutex:要锁住的互斥锁

 

11.6释放线程互斥锁

11.6.1 函数名

phtread_mutex_unlock

11.6.2 函数原形

int pthread_mutex_unlock(pthread_mutex_t *mutex) 11.6.3 函数功能

用来解开互斥锁

11.6.4 所属头文件

<pthread.h>

11.6.5 返回值

成功:0 失败:错误编号

11.6.6 参数说明

mutex:要解开的互斥锁

 

11.7提交条件变量

11.7.1 函数名

pthread_cond_signal

11.7.2 函数原形

int pthread_cond_signal(pthread_cond_t *cond)

11.7.3 函数功能

提交条件变量

11.7.4 所属头文件

<pthread.h>

11.7.5 返回值

成功:0 失败:错误编号

11.7.6 参数说明

cond:要提交的条件变量

 

11.8等待条件变量

11.8.1 函数名

pthread_cond_wait

11.8.2 函数原形

int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)

11.8.3 函数功能

等待条件变量

11.8.4 所属头文件

<pthread.h>

11.8.5 返回值

成功:0 失败:错误编号

11.8.6 参数说明

cond:要等待的条件变量。通过pthread_cond_t cond = PTHREAD_COND_INITIALIZER初始化

mutex:与条件变量关联的互斥锁。先unlock互斥锁,然后再lock

 

 

 

第13类 网络编程类

12.1TCP通信

服务器

socket(创建socket

bind(绑定地址)

listen(监听端口)

accept(等待连接)

send/recv(发|收数据)

close(结束连接)

客户机

socket(创建socket

connect(连接服务器)

send/recv(发|收数据)

close(关闭连接)

 

UDP通信

服务器

socket(创建socket

bind(绑定地址)

sendto/recvfrom(发|收数据)

close(结束连接)

客户机

socket(创建socket

sendto/recvfrom(发|收数据)

close(关闭连接)

 

 

12.1创建套接字

12.1.1 函数名

socket

12.1.2 函数原形

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

12.1.3 函数功能

创建一个套接字

12.1.4 所属头文件

<sys/socket.h>

12.1.5 返回值

成功:套接字描述符失败:-1

12.1.6 参数说明

domain:通信域,通常取AF_INET(表示Ipv4)

type:类型,通常取

SOCK_DGRAM(表示UDP)SOCK_STREAM(表示TCP)

protocol:协议,通常取0

 

12.2地址绑定

12.2.1 函数名

bind

12.2.2 函数原形

int bind(int sockfd, const struct sockeaddr *addr, socklen_t len)

12.2.3 函数功能

将地址绑定到一个套接字

12.2.4 所属头文件

<sys/socket.h>

12.2.5 返回值

12.2.6 参数说明

sockfd:套接字标示符

addr:绑定地址

len:地址长度

 

//#include <netinet/in.h>

通用地址

struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}

IPv4地址
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
}
struct in_addr {
unsigned long s_addr;
}

 

地址转换

in_addr_t inet_addr(const char *cp)

功能:将字符串形式的IP地址转化为整数形式的IP地址(网络字节序)

范例:in_addr.saddr = inet_addr(“192.168.1.1”);

int inet_aton(const char *cp, struct in_addr *inp);

将字符串形式的IP地址转化为整数形式的IP地址(网络字节序)

char *inet_ntoa(struct in_addr)

功能:将整数形式的IP地址转化为字符串形式的IP地址

 

网络字节序

uint32_t htonl(uint32_t hostlong);

功能:将32位的数据从主机字节序转换为网络字节序

范例:in_addr.saddr = htonl(INADDR_ANY)INADDR_ANY表示本机的所有地址

uint16_t htons(uint16_t hostshort);

功能:将16位的数据从主机字节序转换为网络字节序

uint32_t ntohl(uint32_t netlong);

功能:将32位的数据从网络字节序转换为主机字节序

uint16_t ntohs(uint16_t netshort);

功能:将16位的数据从网络字节序转换为主机字节序

 

12.3监听端口

12.3.1 函数名

listen

12.3.2 函数原形

int listen(int sockfd, int backlog)

12.3.3 函数功能

设置服务器监听端口

12.3.4 所属头文件

<sys/socket.h>

12.3.5 返回值

成功:0 失败:-1

12.3.6 参数说明

sockfd:套接字fd

backlog:服务器可连接的客户数量

 

12.4等待连接

12.4.1 函数名

accept

12.4.2 函数原形

int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len)

12.4.3 函数功能

等待客户机连接,如果没有客户机连接,将阻塞服务器

12.4.4 所属头文件

<sys/socket.h>

12.4.5 返回值

成功:返回新的套件字描述符失败:-1

12.4.6 参数说明

sockfd:套接字fd

addr:返回客户机的地址

len:返回的地址长度

 

12.5接收数据

12.5.1 函数名

recv

12.5.2 函数原形

ssize_t send(int sockfd, const void * buf, size_t nbytes, int flags)

12.5.3 函数功能

用于接收数据

12.5.4 所属头文件

<sys/socket.h>

12.5.5 返回值

成功:0 失败:-1

12.5.6 参数说明

sockfd:新的套件字fd

buf:接收的数据

nbytes:接收的字节数

flags:标志

 

12.6发送数据

12.6.1 函数名

send

12.6.2 函数原形

ssize_t send(int sockfd, const void * buf, size_t nbytes, int flags)

12.6.3 函数功能

用于发送数据

12.6.4 所属头文件

<sys/socket.h>

12.6.5 返回值

成功:返回发送的字节数失败:-1

12.6.6 参数说明

sockfd:新的套件字fd

buf:发送的数据

nbytes:发送的字节数

flags:标志

 

12.7建立连接

12.7.1 函数名

connect

12.7.2 函数原形

int connect(int sockfd, const struct sockaddr *addr, socklen_t len)

12.7.3 函数功能

用于客户机向服务器建立连接

12.7.4 所属头文件

<sys/socket.h>

12.7.5 返回值

成功:0 失败:-1

12.7.6 参数说明

sockfd:套接字fd

addr:服务器地址

len:地址长度

 

12.8 udp发送数据

12.8.1 函数名

sendto

12.8.2 函数原形

ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flags, const struct sockaddr *destaddr, socklen_t deslen)

12.8.3 函数功能

发送数据

12.8.4 所属头文件

<sys/socket.h>

12.8.5 返回值

成功:返回发送的字节数失败:-1

12.8.6 参数说明

sockfd:套接字fd

buf:要发送的数据

nbytes:发送数据的字节数

flags:标志

destaddr:目的地址

deslen:地址长度

 

12.9 udp接收数据

12.9.1 函数名

recvfrom

12.9.2 函数原形

ssize_t recvfrom(int sockfd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict addr, socklen_t *restrict addrlen)

12.9.3 函数功能

接收数据

12.9.4 所属头文件

<sys/socket.h>

12.9.5 返回值

成功:0 失败:-1

12.9.6 参数说明

sockfd:套接字fd

buf:接收的数据

len:期望接收数据的字节数

flags:标志

addr:接收的地址

addrlen:接收地址的长度