LINUX 应用编程函数自学手册


原文链接:http://blog.csdn.net/lsamorfati/article/details/49045763


LINUX

应用编程函数自学手册


gedit file.txt

目录

第1类 时间编程类... 5

1.1 获取日历时间... 5

1.2 获取格林威治时间... 5

1.3 获取本地时间... 6

1.4 以字符串方式显示时间... 6

1.5 获取高精度时间... 6

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

2.1 打开文件... 8

2.2 创建文件... 8

2.3 关闭文件... 9

2.4 读文件... 9

2.5 写文件... 10

2.6 定位文件... 10

2.7 复制文件描述符... 11

第3类 库函数文件编程类... 12

3.1 打开文件... 12

3.2 关闭文件... 12

3.3 读文件... 13

3.4 写文件... 13

3.5 定位文件... 14

第4类 多进程编程类... 15

4.1 创建进程... 15

4.2 创建进程... 15

4.3 进程等待... 16

4.4 执行程序... 16

第5类 管道通讯编程类... 17

5.1 创建无名管道... 17

5.2 创建有名管道... 17

5.3 删除有名管道... 18

第6类 信号通讯编程类... 19

6.1 发送信号... 19

6.2 处理信号... 19

第8类 信号量编程类... 20

8.1 创建/打开信号量集合... 20

8.2 操作信号量... 20

第九类共享内存通讯

      9.1 创建打开共享内存……………………………………………………………………………………20

      9.2映射共享内存…………………………………………………………………………………………….21

      9.3分离共享内存…………………………………………………………………………………………….22

      9.4操作共享内存…………………………………………………………………………………………….23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第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 形式存储

1.2.6 参数说明

Timep :待转化的日历时间

struct tm {

               int tm_sec;    /* Seconds (0-60) */

               int tm_min;    /* Minutes (0-59) */

               int tm_hour;   /* Hours (0-23) */

               int tm_mday;   /* Day of the month (1-31) */

               int tm_mon;    /* Month (0-11) */

               int tm_year;   /* Year - 1900 */

               int tm_wday;   /* Day of the week (0-6, Sunday = 0) */

               int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */

               int tm_isdst;  /* Daylight saving time */

           };

1.3 获取本地时间

1.3.1 函数名

Localtime

1.3.2 函数原形

struct tm *localtime(consttime_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格式的时间

 

 

 

 

1.5 获取高精度时间

1.5.1 函数名

Gettimeofday

1.5.2 函数原形

int gettimeofday(struct timeval *tv, structtimezone *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到现在的秒数和微秒数

Tzone 通常为空NULL

 

struct timeval {

   time_t     tv_sec;     /* seconds */

   微秒suseconds_t tv_usec;    /* microseconds */

    };

 

 

 

#include <sys/time.h>

#include <stdio.h>

#include <stdlib.h> malloc头文件

 

int main()

{

    structtimeval *vl;               系统编译不会分配空间导致段错误

    start =(struct timeval*)malloc(sizeof(struct timeval));    申请空间

 

    gettimeofday(vl,NULL);

 

    printf("%time_t\n",vl->tv_sec); int会报错说tv sec为time_t类型

 

    return 0;

}

 

int main()

{

    structtimeval vl; 直接定义结构体无需分配空间           

 

    gettimeofday(&vl,NULL);

 

    printf("%time_t\n",vl.tv_sec); 

 

    return 0;

}

 

 

 

 

2类 系统调用文件编程类

2.1 打开文件

2.1.1 函数名

open

2.1.2 函数原形

intopen(const char *pathname, int flags);

intopen(const char *pathname, int flags, mode_t);

2.1.3 函数功能

打开或者创建一个文件

2.1.4 所属头文件

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

2.1.5 返回值

打开成功返回文件描述符失败返回-1

2.1.6 参数说明

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

flags:文件打开标志

_O_APPEND:以追加的方式打开文件

_O_CREAT: 当文件不存在创建该文件

Mode:一定是在flag中使用了create标志用于表示文件权限

 

2.2 创建文件

2.2.1 函数名

Create

2.2.2 函数原形

int creat(const char *pathname, mode_t  mode);

2.2.3 函数功能

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

2.2.4 所属头文件

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

2.2.5 返回值

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

2.2.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_tcount);

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_tcount);

2.5.3 函数功能

向一个打开的文件写入数据

2.5.4 所属头文件

<unistd.h>

2.5.5 返回值

成功返回写入的字节数 失败返回-1

2.5.6 参数说明

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

count:希望写入的字节数

buf:用来指向写入的数据来自buf指向的空间

 

 

2.6 定位文件

2.6.1 函数名

leesk

2.6.2 函数原形

Off_t lseek(int fd, off_t offset , intwhence);

2.6.3 函数功能

重新定位文件的读写位置

2.6.4 所属头文件

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

2.6.5 返回值

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

2.6.6 参数说明

Fd:操作文件对象

Offect:指针偏移量

Whence:指针开始移动的基础位置(文件头 文件中间 文件末尾)

 

 

 

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 打开文件

fopen

3.1.2 函数原形

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

3.1.3 函数功能

打开文件

3.1.4 所属头文件

<stdio.h>

3.1.5 返回值

成功返回文件指针 失败返回空指针

3.1.6 参数说明

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

Mode:打开模式

如果使用r+如果不存在则创建文件否者将清空文件内容

 

 

 

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 参数说明

Stream:指向读取的文件

Nmemb:读取的数据块数

Size:每块数据的大小

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

 

 

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 参数说明

Stream:指向写入的文件

Nmemb:读取的数据块数

Size:每块数据的大小

Ptr:指向写入数据保存位置

 

 

 

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开头, SEEK_CUR,当前位置or SEEK_END,文件结尾

 

 

第4类 多进程编程类

vfork中父进程可以用returnexit进行退出而子进程只能用exit退出

exit(参数为1表示异常退出0表示正常退出)

exit头文件为<stdlib.h>

  

 

 

 

 

 

 

getpid

 

 

 

 

4.1 创建进程

4.1.1 函数名

fork

4.1.2 函数原形

pid_t fork(void);

4.1.3 函数功能

创建一个子进程

4.1.4 所属头文件

<unistd.h>

4.1.5 返回值

成功在父进程中返回子进程PID在子进程中返回0

失败返回-1

4.1.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.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 返回值

成功返回终止的那个子进程PID

失败返回-1

4.3.6 参数说明

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

 

wait(NULL)

 

 

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:可执行文件运行所需要的参数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第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]读端

pipefd[1]写端

 

 

5.2 创建有名管道

5.2.1 函数名

mkfifo

5.2.2 函数原形

int mkfifo(const char *pathname, mode_tmode);

5.2.3 函数功能

创建有名管道(创建fifo文件)

5.2.4 所属头文件

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

5.2.5 返回值

成功返回0 失败返回-1

5.2.6 参数说明

Pathname:创建文件的名字(包含路径)

Mode:待创建的文件的权限

当没有读进程访问管道时写进程会进入阻塞状态直到读进程进行

 

 

5.3 删除有名管道

5.3.1 函数名

Unlike

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:大于0指向接收信号的进程

Sig:指明要发送的信号

 

 

6.2 处理信号

6.2.1 函数名

signal

6.2.2 函数原形

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_thandler);

6.2.3 函数功能

设置信号的处理方式

6.2.4 所属头文件

<signal.h>

6.2.5 返回值

成功;返回处理函数指针 失败:返回sig_error

6.2.6 参数说明

Signum:用来指明要处理的信号

Handler:对应信号的处理方式

 

 

8类 信号量编程类

8.1 创建/打开信号量集合

8.1.1 函数名

semget

8.1.2 函数原形

int semget(key_t key, int nsems, intsemflg);

8.1.3 函数功能

获取信号量集合的标识符

当k所指的信号量不存在时可用ipc_creat 创建一个信号量集合

8.1.4 所属头文件

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

8.1.5 返回值

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

8.1.6 参数说明

Key:键值

Semfig:标志 可以取IPC_CREAT

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

8.1.7 范例代码

 

Key:

 

 

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;对信号量的操作方式(加1还是减1)

Nsops:要操作多少信号量

           unsigned short sem_num;  /* semaphore number */

           short          sem_op;   /* semaphore operation */

           short          sem_flg;  /* operation flags */

 

8.3 操作信号量集合

8.3.1 函数名

semctl

8.3.2 函数原形

int semctl(int semid, int semnum, int cmd,...);

8.3.3 函数功能

操作信号量集合

8.3.4 所属头文件

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

8.3.5 返回值

成功:返回0  失败:返回-1

8.3.6 参数说明

Cmd:命令有10种格式

Semid:要操作的信号量标识符

Semnum:信号量编号

 

 

 

 

 

第9类共享内存通讯

9.1 创建/打开共享内存

9.1.1 函数名

Shmget

9.1.2 函数原形

int shmget(key_t key, size_t size, intshmflg);

9.1.3 函数功能

创建共享内存

9.1.4 所属头文件

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

9.1.5 返回值

成功:返回共享内存标识符 失败:返回-1

9.1.6 参数说明

key:标识共享内存的键值0/IPC_PRIVATE(创建一个新的共享内存)

size:共享内存的大小

shmfig:创建共享内存标志0:取共享内存标识符,若不存在则函数会报错

IPC_CREAT:当shmflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存,返回此共享内存的标识符

shmid = shmget(IPC_PRIVATE, SIZE,IPC_CREAT|0600 ) ;

 

9.2 映射共享内存

9.2.1 函数名

Shmat

9.2.2 函数原形

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

9.2.3 函数功能

映射共享内存

9.2.4 所属头文件

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

9.2.5 返回值

成功:返回共享内存指针 失败:返回-1

9.2.6 参数说明

shmid:标识共享内存标识符

shmaddr:指定共享内存映射地址的位置,直接为NULL让内核寻找合适位置

shmflag:SHM_RDONLY:只读模式其它为读写模式

shmaddr = (char *)shmat( shmid, NULL, 0 ) ;

 

9.3 分离共享内存

9.3.1 函数名

Shmdt

9.3.2 函数原形

int shmdt(void* addr);

9.3.3 函数功能

取消共享内存与用户进程之间的映射

9.3.4 所属头文件

<sys/shm.h>

9.3.5 返回值

成功:返回0 失败:返回-1

9.3.6 参数说明

addr:shmat的返回值。

 

 

 

 

 

 

9.4 共享内存操作

9.4.1 函数名

Shmctl

9.4.2 函数原形

int shmctl(int shmid, int cmd, structshmid_ds *buf);

9.4.3 函数功能

共享内存操作(包括删除共享内存)

9.4.4 所属头文件

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

9.4.5 返回值

成功:返回0 失败:返回-1

9.4.6 参数说明

shmid:共享内存标识符。

Cmd: IPC_STAT得到共享内存的状态    IPC_SET改变共享内存的状态

     IPC_RMID删除共享内存

Buf:是一个结构体指针。IPC_STAT的时候,取得的状态放在这个结构体中。如果要改变共享内存的状态,用这个结构体指定

1.IPC_RMID命令实际上不从内核删除一个段,而是仅仅把这个段标记为删除,实际的删除发生最后一个进程离开这个共享段时

 

2.当cmd为IPC_RMID时,第三个参数应为NULL。呵呵,大部分我们都是这样做,用这个函数删除共享内存。

第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 返回值

成功:返回消息队列标识符 失败:返回-1

10.1.6 参数说明

Key:对应的键值

Msgflg:IPC_CREAT如果内核中没有与key值相对应的队列,(key为IPC_PRIVATE)则创建它。

IPC_EXCL当和IPC_CREAT一起使用时,如果队列已经存在,则失败。

        IPC_NOWAIT无法得到满足时不阻塞

 

 

if((qid =msgget( keyval, IPC_CREAT | 0660 )) == -1)

10.2向消息队列发送数据

10.2.1 函数名

Msgsent

10.2.2 函数原形

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

10.2.3 函数功能

发送数据

10.2.4 所属头文件

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

10.2.5 返回值

成功:返回0 失败:返回-1

10.2.6 参数说明

Msqid:消息队列标识符

Msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,形态如下

structmsgbuf {

longmtype; /* 消息类型(第几种),必须 > 0 */

charmtext[1]; /* 消息文本(首地址) */

};

Msgsz:消息大小

Msgflg:消息类型IPC_NOWAIT

10.3从消息队列取数据

10.3.1 函数名

Msgrcv

10.3.2 函数原形

int msgrcv(int msqid, const void *ptr,size_t msgsz, long type ,int flg);

10.3.3 函数功能

获取消息队列信息

10.3.4 所属头文件

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

10.3.5 返回值

成功:返回数据长度 失败:返回-1

10.3.6 参数说明

减去sizeof(long)是因为要减去结构体第一个变量的大小

取过数据后消息将被删除

 

10.4消息队列操作函数

10.4.1 函数名

Msgctl

10.4.2 函数原形

int msgctl(int msqid, int cmd, structmsqid_ds *buf);

10.4.3 函数功能

获取消息队列信息

10.4.4 所属头文件

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

10.4.5 返回值

成功:返回0 失败:返回-1

10.4.6 参数说明

Cmd:IPC_STAT 读取消息队列的数据结构msqid_ds,并将其存储在b u f指定的地址中。

IPC_SET 设置消息队列的数据结构msqid_ds中的ipc_perm元素的值。这个值取自buf参数。

IPC_RMID从系统内核中移走消息队列。

 

 

if( msgctl(qid, IPC_RMID, 0) == -1)

 

 

 

 

 

第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>

11.1.5 返回值

成功:返回0  失败:返回错误编号

11.1.6 参数说明

tidp:线程id

attr:线程属性(通常为空)

start_rtn:线程要执行的函数

arg:start的参数

11.2 线程终止

11.2.1 函数名

Pthread_exit

11.2.2 函数原形

void pthread_exit(void *retval);

11.2.3 函数功能

终止线程

11.2.4 所属头文件

<pthread.h> 

11.2.5 返回值

成功:返回0  失败:返回返回错误标号

11.2.6 参数说明

Retval:线程退出返回的指针(自动填充)

11.3 线程等待

11.3.1 函数名

Pthread_join

11.3.2 函数原形

int pthread_join(pthread_t thread, void**retval);

11.3.3 函数功能

线程等待直到线程结束

11.3.4 所属头文件

<pthread.h>

11.3.5 返回值

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

11.3.6 参数说明

thread :线程id

retval:线程退出返回的指针

11.3.7 范例代码

 

 

 

 

第12类tcp网络编程

12.1 创建套接字

12.1.1 函数名

Socket

12.1.2 函数原形

int socket(int domain, int type, intprotocal);

12.1.3 函数功能

创建套接字

12.1.4 所属头文件

<sys/socket.h>

12.1.5 返回值

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

12.1.6 参数说明

domain:协议域,又称协议族(family)。常用的协议族有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域Socket)、AF_ROUTE等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。

type:指定Socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等。流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对于面向连接的TCP服务应用。数据报式Socket(SOCK_DGRAM)是一种无连接的Socket,对应于无连接的UDP服务应用。

protocol:指定协议。常用协议有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。

注意:1.type和protocol不可以随意组合,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当第三个参数为0时,会自动选择第二个参数类型对应的默认协议。

 

 

 

 

 

 

 

12.2 绑定地址

12.2.1 函数名

Bind

12.2.2 函数原形

Int bind(SOCKET socket,const struct sockaddr* address, socklen_t address_len);

12.2.3 函数功能

将地址绑定到套接字

12.2.4 所属头文件

<sys/socket.h>

12.2.5 返回值

成功:返回0 失败:返回-1

12.2.6 参数说明

socket:是一个套接字描述符。

address:是一个sockaddr结构指针,该结构中包含了要结合的地址和端口号

address_len:确定address缓冲区的长度。

 

 

 

 

 

 

 

 

 

 

12.3 设置监听端口

12.3.1 函数名

Listen

12.3.2 函数原形

int listen(int sockfd, int backlog);

12.3.3 函数功能

设置监听端口个数

12.3.4 所属头文件

<sys/socket.h> <sys/types.h>

12.3.5 返回值

成功:返回0 失败:返回-1

12.3.6 参数说明

Sockfd:一个已绑定未被连接的套接字描述符

Backlog:连接请求队列(queue of pendingconnections)的最大长度(一般由2到4)。用SOMAXCONN则由系统确定。

 

 

 

 

 

 

 

 

12.4 等待连接

12.4.1 函数名

Accept

12.4.2 函数原形

 int accept( int sockfd, struct socketaddr* addr, socklen_tlen);

12.4.3 函数功能

接收连接请求

12.4.4 所属头文件

<sys/socket.h> <sys/types.h>

12.4.5 返回值

成功:返回套接字描述符:返回-1

12.4.6 参数说明

sockfd:套接字描述符。

addr:返回连接着的地址

len:接收返回地址的缓冲区长度

 

 

 

 

 

 

 

 

 

 

12.5 发送数据

12.5.1 函数名

Send

12.5.2 函数原形

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

12.5.3 函数功能

发送数据

12.5.4 所属头文件

<sys/socket.h> <sys/types.h>

12.5.5 返回值

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

12.5.6 参数说明

Buf:待发送的缓冲区

nbytes:希望发送字节大小

flag:调用方式标志位, 一般为0, 改变Flags,将会改变Sendto发送的形式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值