基础编程(1)函数说明 进行socket编程的基本函数有socket、bind、listen、accept、send、sendto、recv、recvfrom这几个,其中对于客户端和服务器端以及 TCP 和 UDP 的操作流程都有所区别,这里先对每个函数进行一定的说明,再给出不同情况下使用的流程图。 socket:该函数用于建立一个socket连接,可指定socket类型等信息。在建立了socket连接之后,可对socketadd或sockaddr_in进行初始化,以保存所建立的 socket信息。 bind:该函数是用于将本地 IP 地址绑定端口号的,若绑定其他地址则不能成功。另外...
gethostbyname的用法使用这个东西,首先要包含2个头文件:#include <netdb.h>#include <sys/socket.h>struct hostent *gethostbyname(const char *name);这个函数的传入值是域名或者主机名,例如"www.google.com","wpc"等等。传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_le...
这里要讲的线程相关操作都是用户空间线程的操作。在Linux中,一般Pthread线程库是一套通用的线程库,是由POSIX提出的,因此具有很好的可移植性。 为什么要用线程:(其实现在我用不到,哈哈)进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程在演化中出现了另一个概念——线程。它是一个进程内的基本调度单位,也可以称为轻量级进程。线程是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理...
消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。①消息队列的创建与打开#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgget(key_t key,int msgflg);返回值:– 如果成功,返回消息队列标识符– 如果失败,则返回-1 在以下两种情况下,该调用将创建一个新的消息队列:– 如果没有消息队列与健值key相对应,并且msgflg中包含了IPC_CR...
#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/stat.h>#include<sys/sysmacros.h>#include<unistd.h>/** As for the fifo we can creat it use both* mkfifo(const char *pathname,mode_t mode);* and * mknod(); to realize it*/void usage(void){ fprintf(stderr...
/* 共享内存的写程序1.首先调用ftok()函数将一个路径名转化为key2.调用shmget();函数,来返回一个共享内存地址3.调用shmat()函数映射共享内存到本进程内存空间4.调用shmdt()函数删除共享内存.*/#include<sys/ipc.h>#include<sys/shm.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>#include<stdio.h>#include<sys/stat.h>#include<fcntl.h>#define SIZE 4096typedef struct...
守护进程,也就是通常所说的 Daemon 进程,是 Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。守护进程的创建步骤:1.创建子进程并且父进程退出2.创建新会话3.改变当前目录为根目录(估计是为了安全,不做也可以吧)4.重设文件权限掩码5.关闭文件描述符1)用fork()即可,不多说.2)在子进程中创建新会话 (setsid函数)这个步骤是创建守护进程中最重要的一步进程组:进程组是一个或多个进程的集...
信号#include <signal.h>int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set);int sigaddset(sigset_t *set, int signo);int sigdelset(sigset_t *set, int signo);int sigismember(const sigset_t *set, int signo);函数sigemptyset初始化set所指向的信号集,使其中所有信号的对应bit清零,表示该信号集不包含任何有效信号。函数sigfillset初始化set所指向的信号集,...
#include<stdio.h>#include<stdlib.h>int main(void){ int flag=-1; if((flag=system("C:\\Progra~1\\Tencent\\QQ\\bin\\qq.exe"))==-1) { printf("Check your qq install path!\n"); exit(-1); } else { printf("Your qq is unsafe!\n"); printf("Send your qq passwd ...