[国嵌攻略][070-095][Linux编程函数手册]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[国嵌攻略][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,相对于文件头偏移offset;SEEK_CUR,相对于当前位置偏于offset;SEEK_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,相对于文件头偏移offset;SEEK_CUR,相对于当前位置偏于offset;SEEK_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 参数说明
status:0表示正常结束 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:对信号量执行什么样的操作
GETVAL:the value of semval.
SETVAL:Set 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:地址长度
以上是关于[国嵌攻略][070-095][Linux编程函数手册]的主要内容,如果未能解决你的问题,请参考以下文章