linux下echo与time服务的程序实现

一、针对ECHO服务的TCP客户软件的实现

1.网络拓扑结构:

2.源码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <string.h>
  5 #include <stdarg.h>
  6 #include <sys/types.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 #include <netdb.h>
 11 #include <errno.h>
 12 
 13 #define LINELEN 128
 14 extern int errno;
 15 
 16 int TCPecho(const char *host, const char *service);
 17 int errexit(const char *format,...);
 18 int connectsock(const char *host, const char *service, const char *transport );
 19 int connectTCP(const char *host, const char *service);
 20 
 21 int main(int argc, char *argv[]){
 22     char *host= "localhost";
 23     char *service= "echo";
 24     switch(argc){
 25 case 1:
 26     host = "localhost";
 27     break;
 28 case 3:
 29     service = argv[2];
 30 case 2:
 31     host=argv[1];
 32     break;
 33 default:
 34     fprintf(stderr,"usage:TCPecho[host[port]]\n");
 35     exit(1);
 36     }
 37     TCPecho(host,service);
 38     exit(0);
 39 }
 40 int TCPecho(const char *host,const char *service){
 41     char buf[LINELEN+1];
 42     int s,n;
 43     int outchars, inchars;
 44     s=connectTCP(host, service);
 45     while(fgets(buf,sizeof(buf),stdin)){
 46         buf[LINELEN]='\0';
 47         outchars=strlen(buf);
 48         (void)write(s,buf,outchars);
 49         for(inchars=0;inchars<outchars;inchars+=n){
 50             n=read(s,&buf[inchars],outchars-inchars);
 51             if(n<0)
 52                     errexit("socker read failed: %s\n",strerror(errno));
 53         }
 54         fputs(buf,stdout);
 55     }
 56 }
 57 int errexit(const char *format,...){
 58     va_list arg;
 59     va_start(arg, format);
 60     vfprintf(stderr,format,arg);
 61     va_end(arg);
 62     exit(1);
 63 }
 64 int connectsock(const char *host, const char *service, const char *transport )
 65 /*
 66  * Arguments:
 67  *      host      - name of host to which connection is desired
 68  *      service   - service associated with the desired port
 69  *      transport - name of transport protocol to use ("tcp" or "udp")
 70  */
 71 {
 72     struct hostent  *phe;   /* pointer to host information entry    */
 73     struct servent  *pse;   /* pointer to service information entry */
 74     struct protoent *ppe;   /* pointer to protocol information entry*/
 75     struct sockaddr_in sin; /* an Internet endpoint address     */
 76     int s, type;    /* socket descriptor and socket type    */
 77 
 78 
 79     memset(&sin, 0, sizeof(sin));
 80     sin.sin_family = AF_INET;
 81 
 82     /* Map service name to port number */
 83     if ( pse = getservbyname(service, transport) )
 84         sin.sin_port = pse->s_port;
 85     else if ((sin.sin_port=htons((unsigned short)atoi(service))) == 0)
 86         errexit("can't get \"%s\" service entry\n", service);
 87 
 88     /* Map host name to IP address, allowing for dotted decimal */
 89     if ( phe = gethostbyname(host) )
 90         memcpy(&sin.sin_addr, phe->h_addr, phe->h_length);
 91     else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE )
 92         errexit("can't get \"%s\" host entry\n", host);
 93 
 94     /* Map transport protocol name to protocol number */
 95     if ( (ppe = getprotobyname(transport)) == 0)
 96         errexit("can't get \"%s\" protocol entry\n", transport);
 97 
 98     /* Use protocol to choose a socket type */
 99     if (strcmp(transport, "udp") == 0)
100         type = SOCK_DGRAM;
101     else
102         type = SOCK_STREAM;
103 
104     /* Allocate a socket */
105     s = socket(PF_INET, type, ppe->p_proto);
106     if (s < 0)
107         errexit("can't create socket: %s\n", strerror(errno));
108 
109     /* Connect the socket */
110     if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
111         errexit("can't connect to %s.%s: %s\n", host, service,
112             strerror(errno));
113     return s;
114 }
115 int connectTCP(const char *host, const char *service){
116     return connectsock(host,service,"tcp");
117 }

二、针对echo服务的并发的面向连接的服务器软件的实现

1.网络拓扑结构:

2.源码:

  1 #define _USE_BSD
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5 #include <string.h>
  6 #include <stdarg.h>
  7 #include <sys/types.h>
  8 #include <sys/socket.h>
  9 #include <netinet/in.h>
 10 #include <arpa/inet.h>
 11 #include <netdb.h>
 12 #include <signal.h>
 13 #include <errno.h>
 14 
 15 #define QLEN 32
 16 #define BUFSIZE 4096
 17 extern int errno;
 18 unsigned short portbase = 0;
 19 
 20 void reaper(int);
 21 int TCPechod(int fd);
 22 int errexit(const char *format,...);
 23 int passivesock(const char *service, const char *transport, int qlen);
 24 int passiveTCP(const char *service,int qlen);
 25 
 26 int main(int argc, char *argv[]){
 27     char *service= "echo";
 28     struct sockaddr_in fsin;
 29     unsigned int alen;
 30     int msock,ssock;
 31     switch(argc){
 32 case 1:
 33     break;
 34 case 2:
 35     service=argv[1];
 36     break;
 37 default:
 38     errexit("usage: TCPechod [port]\n");
 39     }
 40 
 41     msock=passiveTCP(service,QLEN);
 42     (void)signal(SIGCHLD,(__sighandler_t)QLEN);
 43 
 44     while(1){
 45         alen=sizeof(fsin);
 46         ssock=accept(msock,(struct sockaddr *)&fsin,&alen);
 47         if(ssock<0){
 48             if(errno==EINTR)    continue;
 49             errexit("accept: %s\n",strerror(errno));
 50         }
 51         switch(fork()){
 52     case 0:
 53         (void)close(msock);
 54         exit(TCPechod(ssock));
 55     default:
 56         (void)close(ssock);
 57         break;
 58     case -1:
 59         errexit("fork: %s\n",strerror(errno));
 60         }
 61     }
 62 }
 63 
 64 void reaper(int sig){
 65     int status;
 66     while(wait3(&status,WNOHANG,(struct rusage *)0)>=0) ;
 67 }
 68 int TCPechod(int fd){
 69     char buf[BUFSIZ];
 70     int cc;
 71 
 72     while(cc=read(fd,buf,sizeof(buf))){
 73         if(cc<0)
 74             errexit("echo read: %s\n",strerror(errno));
 75         if(write(fd,buf,cc)<0)
 76             errexit("echo write: %s\n",strerror(errno));
 77     }
 78     return 0;
 79 }
 80 int errexit(const char *format,...){
 81     va_list arg;
 82     va_start(arg, format);
 83     vfprintf(stderr,format,arg);
 84     va_end(arg);
 85     exit(1);
 86 }
 87 int passivesock(const char *service, const char *transport, int qlen)
 88 /*
 89  * Arguments:
 90  *      service   - service associated with the desired port
 91  *      transport - transport protocol to use ("tcp" or "udp")
 92  *      qlen      - maximum server request queue length
 93  */
 94 {
 95 
 96     struct servent*pse;/* pointer to service information entry*/
 97     struct protoent *ppe;/* pointer to protocol information entry*/
 98     struct sockaddr_in sin;/* an Internet endpoint address*/
 99     int s, type;/* socket descriptor and socket type*/
100 
101     memset(&sin, 0, sizeof(sin));
102     sin.sin_family = AF_INET;
103     sin.sin_addr.s_addr = INADDR_ANY;
104 
105         /* Map service name to port number */
106     if ( pse = getservbyname(service, transport) )
107     sin.sin_port = htons(ntohs((unsigned short)pse->s_port)+ portbase);
108     else
109               if ((sin.sin_port=htons((unsigned short)atoi(service)+portbase)) == 0)
110     errexit("can't create passive service %d \n",sin.sin_port);
111 
112         /* Map protocol name to protocol number */
113     if ( (ppe = getprotobyname(transport)) == 0)
114     errexit("can't get \"%s\" protocol entry\n", transport);
115 
116         /* Use protocol to choose a socket type */
117     if (strcmp(transport, "udp") == 0)
118     type = SOCK_DGRAM;
119     else
120     type = SOCK_STREAM;
121 
122         /* Allocate a socket */
123     s = socket(PF_INET, type, ppe->p_proto);
124     if (s < 0)
125     errexit("can't create socket: %s\n", strerror(errno));
126 
127         /* Bind the socket */
128     if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
129     errexit("can't bind to %s port: %s\n", service,
130     strerror(errno));
131     if (type == SOCK_STREAM && listen(s, qlen) < 0)
132     errexit("can't listen on %s port: %s\n", service,
133     strerror(errno));
134     return s;
135 }
136 int passiveTCP(const char *service,int qlen){
137     return passivesock(service,"tcp",qlen);
138 }

三、针对TIME服务的UDP客户软件的实现

1.网络拓扑结构:

2.源码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <string.h>
  5 #include <stdarg.h>
  6 #include <sys/types.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 #include <netdb.h>
 11 #include <time.h>
 12 #include <errno.h>
 13 
 14 #define BUFSIZE 64
 15 #define UNIXEPOCH 2208988800UL
 16 #define MSG "what time is it?\n"
 17 extern int errno;
 18 
 19 int errexit(const char *format,...);
 20 int connectsock(const char *host, const char *service, const char *transport );
 21 int connectUDP(const char *host, const char *service);
 22 
 23 int main(int argc, char *argv[]){
 24     char *host= "localhost";
 25     char *service= "time";
 26     time_t now;
 27     int s,n;
 28 
 29     switch(argc){
 30 case 1:
 31     host = "localhost";
 32     break;
 33 case 3:
 34     service = argv[2];
 35 case 2:
 36     host=argv[1];
 37     break;
 38 default:
 39     fprintf(stderr,"usage: UDPtime[host[port]]\n");
 40     exit(1);
 41     }
 42 
 43     s=connectUDP(host,service);
 44     (void)write(s,MSG,strlen(MSG));
 45 
 46     n=read(s,(char *)&now,sizeof(now));
 47     if(n<0)     errexit("read failed: %s\n",strerror(errno));
 48     now=ntohl((unsigned long)now);
 49     now-=UNIXEPOCH;
 50     printf("%s",ctime(&now));
 51     exit(0);
 52 }
 53 int errexit(const char *format,...){
 54     va_list arg;
 55     va_start(arg, format);
 56     vfprintf(stderr,format,arg);
 57     va_end(arg);
 58     exit(1);
 59 }
 60 int connectsock(const char *host, const char *service, const char *transport )
 61 /*
 62  * Arguments:
 63  *      host      - name of host to which connection is desired
 64  *      service   - service associated with the desired port
 65  *      transport - name of transport protocol to use ("tcp" or "udp")
 66  */
 67 {
 68     struct hostent  *phe;   /* pointer to host information entry    */
 69     struct servent  *pse;   /* pointer to service information entry */
 70     struct protoent *ppe;   /* pointer to protocol information entry*/
 71     struct sockaddr_in sin; /* an Internet endpoint address     */
 72     int s, type;    /* socket descriptor and socket type    */
 73 
 74 
 75     memset(&sin, 0, sizeof(sin));
 76     sin.sin_family = AF_INET;
 77 
 78     /* Map service name to port number */
 79     if ( pse = getservbyname(service, transport) )
 80         sin.sin_port = pse->s_port;
 81     else if ((sin.sin_port=htons((unsigned short)atoi(service))) == 0)
 82         errexit("can't get \"%s\" service entry\n", service);
 83 
 84     /* Map host name to IP address, allowing for dotted decimal */
 85     if ( phe = gethostbyname(host) )
 86         memcpy(&sin.sin_addr, phe->h_addr, phe->h_length);
 87     else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE )
 88         errexit("can't get \"%s\" host entry\n", host);
 89 
 90     /* Map transport protocol name to protocol number */
 91     if ( (ppe = getprotobyname(transport)) == 0)
 92         errexit("can't get \"%s\" protocol entry\n", transport);
 93 
 94     /* Use protocol to choose a socket type */
 95     if (strcmp(transport, "udp") == 0)
 96         type = SOCK_DGRAM;
 97     else
 98         type = SOCK_STREAM;
 99 
100     /* Allocate a socket */
101     s = socket(PF_INET, type, ppe->p_proto);
102     if (s < 0)
103         errexit("can't create socket: %s\n", strerror(errno));
104 
105     /* Connect the socket */
106     if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
107         errexit("can't connect to %s.%s: %s\n", host, service,
108             strerror(errno));
109     return s;
110 }
111 int connectUDP(const char *host, const char *service){
112     return connectsock(host,service,"udp");
113 }

四、针对TIME服务的UDP服务器端软件的实现

1.网络拓扑结构:

2.源码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <string.h>
  5 #include <stdarg.h>
  6 #include <sys/types.h>
  7 #include <sys/socket.h>
  8 #include <netinet/in.h>
  9 #include <arpa/inet.h>
 10 #include <netdb.h>
 11 #include <errno.h>
 12 
 13 #define UNIXEPOCH 2208988800UL
 14 
 15 extern int errno;
 16 unsigned short portbase = 0;
 17 
 18 int errexit(const char *format,...);
 19 int passivesock(const char *service, const char *transport, int qlen);
 20 int passiveUDP(const char *service);
 21 
 22 int main(int argc, char *argv[]){
 23     char *service= "time";
 24     struct sockaddr_in fsin;
 25     char buf[1];
 26     int sock;
 27     time_t now;
 28     unsigned int alen;
 29 
 30     switch(argc){
 31 case 1:
 32     break;
 33 case 2:
 34     service=argv[1];
 35     break;
 36 default:
 37     errexit("usage: UDPtimed [port]\n");
 38     }
 39 
 40     sock=passiveUDP(service);
 41 
 42     while(1){
 43         alen=sizeof(fsin);
 44         if(recvfrom(sock,buf,sizeof(buf),0,(struct sockaddr *)&fsin,&alen)<0)
 45             errexit("recvfrom: %s\n",strerror(errno));
 46         (void)time(&now);
 47         now=htonl((unsigned long)(now+UNIXEPOCH));
 48         (void)sendto(sock,(char*)&now,sizeof(now),0,(struct sockaddr *)&fsin,sizeof(fsin));
 49     }
 50 }
 51 
 52 int errexit(const char *format,...){
 53     va_list arg;
 54     va_start(arg, format);
 55     vfprintf(stderr,format,arg);
 56     va_end(arg);
 57     exit(1);
 58 }
 59 int passivesock(const char *service, const char *transport, int qlen)
 60 /*
 61  * Arguments:
 62  *      service   - service associated with the desired port
 63  *      transport - transport protocol to use ("tcp" or "udp")
 64  *      qlen      - maximum server request queue length
 65  */
 66 {
 67 
 68     struct servent*pse;/* pointer to service information entry*/
 69     struct protoent *ppe;/* pointer to protocol information entry*/
 70     struct sockaddr_in sin;/* an Internet endpoint address*/
 71     int s, type;/* socket descriptor and socket type*/
 72 
 73     memset(&sin, 0, sizeof(sin));
 74     sin.sin_family = AF_INET;
 75     sin.sin_addr.s_addr = INADDR_ANY;
 76 
 77         /* Map service name to port number */
 78     if ( pse = getservbyname(service, transport) )
 79     sin.sin_port = htons(ntohs((unsigned short)pse->s_port)+ portbase);
 80     else
 81               if ((sin.sin_port=htons((unsigned short)atoi(service)+portbase)) == 0)
 82     errexit("can't create passive service %d \n",sin.sin_port);
 83 
 84         /* Map protocol name to protocol number */
 85     if ( (ppe = getprotobyname(transport)) == 0)
 86     errexit("can't get \"%s\" protocol entry\n", transport);
 87 
 88         /* Use protocol to choose a socket type */
 89     if (strcmp(transport, "udp") == 0)
 90     type = SOCK_DGRAM;
 91     else
 92     type = SOCK_STREAM;
 93 
 94         /* Allocate a socket */
 95     s = socket(PF_INET, type, ppe->p_proto);
 96     if (s < 0)
 97     errexit("can't create socket: %s\n", strerror(errno));
 98 
 99         /* Bind the socket */
100     if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
101     errexit("can't bind to %s port: %s\n", service,
102     strerror(errno));
103     if (type == SOCK_STREAM && listen(s, qlen) < 0)
104     errexit("can't listen on %s port: %s\n", service,
105     strerror(errno));
106     return s;
107 }
108 int passiveUDP(const char *service){
109     return passivesock(service,"udp",0);
110 }

 

这里是用的我实验时的代码,前两个是关于echo服务的客户端与服务器端,有下面运行截图:

后两个是关于time服务的,有下面运行截图:

实验时由于多次运行验证,总会出现端口占用的情况,于是这里每次运行时都输入程序的入口参数(就是main函数里的形参),自选端口,方便至极。还有就是代码里多个函数可以写入多个cpp里,这里偷懒了。

转载于:https://www.cnblogs.com/jiu0821/p/4553542.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux高性能服务器编程:进程池和线程池原理及应用(有图有代码有真相!!!)

一、问题引入 在前面编写多进程、多线程服务器时通过动态创建子进程和子线程来实现并发服务器&#xff0c;这样做有以下缺点&#xff1a; 1&#xff09;动态创建进程、线程将会比较耗费时间&#xff0c;将导致较慢的客户响应。 2&#xff09;动态创建的子进程只为一个客户服…

Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)

一、问题引入 阻塞型的网络编程接口 几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。 我们假设希望建立一个简单的服务器程序&#xff0c;实现向单个客户机提供类似于“一问一答”的…

数据结构:神奇的B树实现解析(有图有代码有真相!!!)

一、B树引入 二叉搜索树、平衡二叉树、红黑树都是动态查找树&#xff0c;典型的二叉搜索树结构&#xff0c;查找的时间复杂度和树的高度相关O(log2N)。 1&#xff09;数据杂乱无章-------线性查找--O&#xff08;n&#xff09; 2&#xff09;数据有序-------二分查找 ---O(lo…

Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)

一、dup/dup2 有时我们希望把标准输入重定向到一个文件&#xff0c;或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符&#xff08;没有用的文件描述符最小的编号&#xff09;。 dup2可以让用户指定返回的文件描述符的值…

Linux:I/O多路转接之select(有图有代码有真相!!!)

一、select引入 一次 I/O 分为两个部分&#xff1a;1&#xff09;等待数据就绪 2&#xff09;进行数据转移 1、select 原理&#xff1a; select的原理就是减少等待数据就绪的比重&#xff0c;巧妙的利用等待队列机制让用户进程适当在没有资源可读/写时睡眠&#xff0c;有资…

Linux: I/O多路转接之poll(有图有代码有真相!!!)

一、poll()函数解析 不同与select使⽤用三个位图来表⽰示三个fdset的⽅方式&#xff0c;poll使⽤用⼀一个 pollfd的指针实现。pollfd结构包含了要监视的event和发⽣生的event&#xff0c; 不再使⽤用select“参数-值”传递的⽅方式。同时&#xff0c;pollfd并没有最⼤大数量限…

kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...

『使用某音乐播放器下载了周杰伦的110首歌曲&#xff0c;其中106首是kgm格式&#xff0c;4首mp3格式&#xff0c;装到U盘后&#xff0c;在其它设备播放只有4首mp3格式的可以播放&#xff0c;其它的均无法播放&#xff0c;请问该如何处理&#xff1f;』网友留言截图这是一位网友…

iconsvg image怎么变为path_昆凌是怎么收服天王周杰伦的?这几招太高明了

周杰伦和昆凌又出来撒狗粮了&#xff01;就在前两天(6月2日)&#xff0c;在参加郎朗的婚礼时&#xff0c;#周杰伦搂昆凌看烟花#的消息悄悄上了热搜。视频中&#xff0c;两人并肩站立&#xff0c;一起欣赏着窗外的美景。周杰伦时不时在昆凌的耳边私语几句&#xff0c;看起来很是…

ewebeditor未授权:功能被禁用请先配置授权_SteamPY新功能——外区账号礼物自动领取...

自从PY平台增加了外区代购后发现许多玩家在购买礼物时常会发生收到礼物后准备点击入库时弹出地区不可用的提示这个问题在Steam外区账号一直频繁发生究其因在于Steam账号登录时的IP问题遇到该问题切勿拒收礼物&#xff01;通过Steam客户端清理登录授权注销退出后再次使用账号对应…

Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)

一、命令代换&#xff08;命令替换&#xff09; 由 或 $() 括起来的也是一条命令&#xff0c;shell先执行该命令&#xff0c;再将结果立刻代换到当前命令行中。 简单例子&#xff1a; DATEdate echo $DATE DATE$(date) echo $DATE 执行结果&#xff1a; 二、优缺点&#x…

精雕道路怎么遍弧形_【养护技术】道路“创可贴”——沥青冷补料 六大优势助力道路养护...

点击上面蓝字关注我们微信号&#xff1a;xzgsgl随着城市精细化管理目标不断提高&#xff0c;市政道路养护修补的要求也越来越高。不但对修补的外观、质量有了更高的标准&#xff0c;对修复时限也提出了一定要求&#xff0c;这就要求我们的养护单位快速、优质地完成道路修补任务…

单耳蓝牙耳机怎么连接_蓝牙耳机怎么挑选?推荐性价比高的蓝牙耳机

随着手机逐渐取消了耳机孔&#xff0c;越来越多的人们开始使用上了蓝牙耳机。在当今这个飞速发展的时代&#xff0c;蓝牙耳机无疑成为了新时代的宠儿。无论是上班族还是当代大学生等年轻化群体&#xff0c;耳机的第一选择都是蓝牙耳机。但是面对市面上如此多的蓝牙耳机&#xf…

Linux: shell命令 eval (有图有代码有真相!!!)

一、eval 命令定义 shell中的eval命令将会首先扫描命令行进行所有的替换&#xff0c;然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。 该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。不过这些变量本身并不复杂。eval 命令也可…

qlabel可以选中吗_惊现凡尔赛式排版!原来微信公众号排版样式还可以“变装”?...

各位小伙伴们&#xff0c;要集中注意力了&#xff01;接下来就是考验你们观察力的时候啦&#xff01;快跟着小妹儿看一下&#xff0c;一个样式到底能有多少种玩法&#xff1f;文中使用工具为公众号编辑器-小蚂蚁编辑器。1、添加/删除背景编辑器里的内容样式是可以增加或者删除背…

LInux:shell 彩色进度条实现(有图有代码有真相!!!)

一、进度条原理&#xff08;以前的博客详细讲述过&#xff09;&#xff1a;http://blog.csdn.net/sharp_up/article/details/55506555 二、颜色设置 // 字体颜范围(前景颜色):30~39 30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色 // 字背景颜色范围(背景颜…

Linux: 系统配置 crond 和 crontab(有图有代码有真相!!!)

1、相关概述 linux下工作调度的种类有&#xff1a;at , cron 一种是例行性的&#xff0c;就是每隔一定的周期来办某事。 一种是突发性的&#xff0c;就是做完这一次没有以后。 crontab这个命令所设置的工作将会一直循环进行下去&#xff0c;循环的时间可以是分钟、小时、…

LInux:shell 命令:字符串截取

1、cut命令截取 使用说明 cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数&#xff0c;cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。 主要参数 -b &#xff1a;以字节为单位进行分割。这些字节位置将忽…

smart700iev3 程序下载设置_分享一款Aira2下载工具

Qdown&#xff0c;一款新的Aria2下载器&#xff0c;Aria2是一个命令行的下载器&#xff0c;非常强大&#xff0c;本软件套壳了Aria2&#xff0c;并且制作了界面版本&#xff0c;使用体验不错。Qdown是一款基于Aria2的Windows文件下载器&#xff0c;几乎支持现阶段所有的下载协议…

引用js_js值和引用

值和引用在许多编程语言中&#xff0c;赋值和参数传递可以通过值复制或者引用复制来完成&#xff0c;这取决于我们使用什么语法。例如&#xff0c;在 C 中如果要向函数传递一个数字并在函数中更改它的值&#xff0c;就可以这样来声明参 数 int& myNum&#xff0c;即如果传递…

]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)

1、判断两个链表是否相交&#xff0c;若相交&#xff0c;求交点。&#xff08;假设链表不带环&#xff09; 两个指针同时指向两个链表&#xff0c;分别依次往后遍历链表到最后一个节点&#xff0c;如指针的值相同&#xff08;即节点地址相同&#xff09;&#xff0c;反之没有交…