Linux常用开发服务器的代码[Linux zhoulifa ]

经常用到的几个自定义函数:
1、开启监听的函数

http://linux.chinaunix.net/bbs/viewthread.php?tid=786283&extra=

/*************************关于本函数************************************  
*function_name: OpenSCPServer  
*参数说明:port整数型监听端口号,total整数型监听个数,sendbuflen整数型发送缓冲区大小  
*          recvbuflen整数型接收缓冲区大小,blockORnot整数型是否阻塞,reuseORnot整数型是否端口重用  
*purpose: 用来建立一个tcp服务端socket  
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)  
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言  
*date time:2006-07-05 20:00:00  
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途  
* 但请遵循GPL  
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码  
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力  
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含GetCurrentTime.h头文件  
*********************************************************************/  
int  
OpenSCPServer(int port, int total, int sendbuflen, int recvbuflen, int blockORnot, int reuseORnot)    {   
    int    sockfd = 0, ret = 0, opt = 0, flags=1;   
    struct sockaddr_in    laddr;   
  
    ret = sockfd = socket(PF_INET, SOCK_STREAM, 0);   
    if(ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer socket() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        return -1;   
    }   
  
    ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuseORnot, sizeof(int));   
    if(ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer setsockopt() reuse error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        return -2;   
    }   
  
    ret = setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &recvbuflen, sizeof(int));   
    if ( ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer setsockopt() recvbuf error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        return -3;   
    }   
  
    ret = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuflen, sizeof(int));   
    if (ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer setsockopt() sendbuf error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        return -4;   
    }   
  
    ioctl(sockfd,FIONBIO,&blockORnot);/*block or not*/  
  
    laddr.sin_family = PF_INET;   
    laddr.sin_port = htons(port);   
    laddr.sin_addr.s_addr = INADDR_ANY;   
    bzero(&(laddr.sin_zero), 8);   
  
    ret = bind(sockfd, (struct sockaddr *)&laddr, sizeof(struct sockaddr));   
    if(ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer bind() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        close(sockfd);   
        return -5;   
    }   
    ret = listen(sockfd, total);   
    if(ret < 0)    {   
        sprintf(errorMessage, "OpenTCPServer listen() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        close(sockfd);   
        return -6;   
    }   
    sprintf(errorMessage, "OpenTCPServer opened on port.%d(%d) OK, socket(%d), buf(%d:%d)! %s", port, total, sockfd, sendbuflen, recvbuflen, GetCurrentTime(0, 0));   
    return sockfd;   
}   

/*************************关于本函数************************************
*function_name: OpenSCPServer
*参数说明:port整数型监听端口号,total整数型监听个数,sendbuflen整数型发送缓冲区大小
*          recvbuflen整数型接收缓冲区大小,blockORnot整数型是否阻塞,reuseORnot整数型是否端口重用
*purpose: 用来建立一个tcp服务端socket
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2006-07-05 20:00:00
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含GetCurrentTime.h头文件
*********************************************************************/
int
OpenSCPServer(int port, int total, int sendbuflen, int recvbuflen, int blockORnot, int reuseORnot)    {
    int    sockfd = 0, ret = 0, opt = 0, flags=1;
    struct sockaddr_in    laddr;

    ret = sockfd = socket(PF_INET, SOCK_STREAM, 0);
    if(ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer socket() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        return -1;
    }

    ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuseORnot, sizeof(int));
    if(ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer setsockopt() reuse error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        return -2;
    }

    ret = setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &recvbuflen, sizeof(int));
    if ( ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer setsockopt() recvbuf error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        return -3;
    }

    ret = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuflen, sizeof(int));
    if (ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer setsockopt() sendbuf error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        return -4;
    }

    ioctl(sockfd,FIONBIO,&blockORnot);/*block or not*/

    laddr.sin_family = PF_INET;
    laddr.sin_port = htons(port);
    laddr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(laddr.sin_zero), 8);

    ret = bind(sockfd, (struct sockaddr *)&laddr, sizeof(struct sockaddr));
    if(ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer bind() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        close(sockfd);
        return -5;
    }
    ret = listen(sockfd, total);
    if(ret < 0)    {
        sprintf(errorMessage, "OpenTCPServer listen() error! return:%d, errno=%d, errortext:'%s' %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
        close(sockfd);
        return -6;
    }
    sprintf(errorMessage, "OpenTCPServer opened on port.%d(%d) OK, socket(%d), buf(%d:%d)! %s", port, total, sockfd, sendbuflen, recvbuflen, GetCurrentTime(0, 0));
    return sockfd;
}

2、连接服务器的函数

/*************************关于本函数************************************  
*function_name: ConnectSCPServer  
*参数说明:serverip服务器IP地址或主机名,serverport服务器端口,blockORnot整数型是否阻塞  
*purpose: 用来建立一个tcp客户端socket  
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)  
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言  
*date time:2006-07-05 20:40:00  
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途  
* 但请遵循GPL  
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码  
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力  
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含自己编写的GetCurrentTime.h头文件  
*********************************************************************/  
int  
ConnectSCPServer(char * serverip, int serverport, int blockORnot)    {   
    int    serversock = 0, ret = 0;   
    unsigned long    addr;   
    struct sockaddr_in    sin;   
    struct hostent *he;   
  
    if((he=gethostbyname(serverip))== 0) {   
        sprintf(errorMessage, "ConnectSCPServer IP address '%s' error! return:-1 %s", serverip, GetCurrentTime(0, 0));   
        return -1;   
    }   
  
    serversock = socket(PF_INET, SOCK_STREAM, 0);   
    if(serversock == -1)    {   
        sprintf(errorMessage, "ConnectSCPServer socket() error! return:-2, errno=%d, errortext:'%s' %s", errno, strerror(errno), GetCurrentTime(0, 0));   
        return -2;   
    }   
  
    ioctl(serversock, FIONBIO, &blockORnot);  //block or not   
  
    memset((char*)&sin, 0, sizeof(struct sockaddr_in));   
    sin.sin_family = PF_INET;   
    sin.sin_port = htons(serverport);   
    sin.sin_addr = *((struct in_addr *)he->h_addr);   
  
    ret = connect(serversock, (struct sockaddr *)&sin, sizeof(sin));   
  
    if(ret == -1)    {   
        sprintf(errorMessage, "ConnectSCPServer connect() error! return:-3, errno=%d, errortext:'%s' %s", errno, strerror(errno), GetCurrentTime(0, 0));   
        close(serversock);   
        return -3;   
    }   
  
    return serversock;   
}   

/*************************关于本函数************************************
*function_name: ConnectSCPServer
*参数说明:serverip服务器IP地址或主机名,serverport服务器端口,blockORnot整数型是否阻塞
*purpose: 用来建立一个tcp客户端socket
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2006-07-05 20:40:00
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含自己编写的GetCurrentTime.h头文件
*********************************************************************/
int
ConnectSCPServer(char * serverip, int serverport, int blockORnot)    {
    int    serversock = 0, ret = 0;
    unsigned long    addr;
    struct sockaddr_in    sin;
    struct hostent *he;

    if((he=gethostbyname(serverip))== 0) {
        sprintf(errorMessage, "ConnectSCPServer IP address '%s' error! return:-1 %s", serverip, GetCurrentTime(0, 0));
        return -1;
    }

    serversock = socket(PF_INET, SOCK_STREAM, 0);
    if(serversock == -1)    {
        sprintf(errorMessage, "ConnectSCPServer socket() error! return:-2, errno=%d, errortext:'%s' %s", errno, strerror(errno), GetCurrentTime(0, 0));
        return -2;
    }

    ioctl(serversock, FIONBIO, &blockORnot);  //block or not

    memset((char*)&sin, 0, sizeof(struct sockaddr_in));
    sin.sin_family = PF_INET;
    sin.sin_port = htons(serverport);
    sin.sin_addr = *((struct in_addr *)he->h_addr);

    ret = connect(serversock, (struct sockaddr *)&sin, sizeof(sin));

    if(ret == -1)    {
        sprintf(errorMessage, "ConnectSCPServer connect() error! return:-3, errno=%d, errortext:'%s' %s", errno, strerror(errno), GetCurrentTime(0, 0));
        close(serversock);
        return -3;
    }

    return serversock;
}

3、发送数据函数Send

/*************************关于本函数************************************  
*function_name: Send  
*参数说明:sock整数型socket,buf待发送的内容,size要发送的大小,flag发送选项,timeout超时时间值  
*purpose: 用来通过一个socket在指定时间内发送数据  
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)  
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言  
*date time:2006-07-05 20:58:00  
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途  
* 但请遵循GPL  
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码  
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力  
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含自己编写的GetCurrentTime.h头文件  
*********************************************************************/  
int  
Send(int sock, char * buf, size_t size, int flag, int timeout)    {   
    int i = 0, ret = 0, intretry = 0;   
  
    struct timeval tival;   
    fd_set writefds;   
    int maxfds = 0;   
  
    tival.tv_sec = timeout;   
    tival.tv_usec = 0;   
  
    FD_ZERO(&writefds);   
  
    if(sock > 0) {   
        FD_SET(sock, &writefds);   
        maxfds=((sock > maxfds)?sock:maxfds);   
    }   
    else    {   
        sprintf(errorMessage, "Send socket:%d error! return:-2 %s", sock, GetCurrentTime(0, 0));   
        return -2;   
    }   
  
    ret = select(maxfds + 1, NULL, &writefds, NULL, &tival);   
    if(ret <= 0) {   
        if(ret < 0)    sprintf(errorMessage, "Send socket:%d select() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        else sprintf(errorMessage, "Send socket:%d select timeout(%d)! %s", sock, timeout, GetCurrentTime(0, 0));   
        close(sock);   
        return -3;   
    }   
    if(!(FD_ISSET(sock, &writefds)))    {   
        sprintf(errorMessage, "Send socket:%d not in writefds! %s", sock, GetCurrentTime(0, 0));   
        close(sock);   
        return -4;   
    }   
  
    while(i < size)    {   
        ret = send(sock, buf + i, size - i, flag);   
        if(ret <= 0)    {   
            sprintf(errorMessage, "Send socket:%d send() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));   
  
            if (EINTR == errno)   
              if(intretry < 10)  {intretry++;continue;}   
              else sprintf(errorMessage, "Send socket:%d send() error!EINTR 10 times! %s", sock, GetCurrentTime(0, 0));   
  
            close(sock);   
            return -1;   
        }   
        else i += ret;   
    }   
    sprintf(errorMessage, "Send socket:%d send() OK! %d/%d bytes sent! %s", sock, i, size, GetCurrentTime(0, 0));   
    return i;   
}   

/*************************关于本函数************************************
*function_name: Send
*参数说明:sock整数型socket,buf待发送的内容,size要发送的大小,flag发送选项,timeout超时时间值
*purpose: 用来通过一个socket在指定时间内发送数据
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2006-07-05 20:58:00
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
* 但请遵循GPL
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含自己编写的GetCurrentTime.h头文件
*********************************************************************/
int
Send(int sock, char * buf, size_t size, int flag, int timeout)    
{
    int i = 0, ret = 0, intretry = 0;

    struct timeval tival;
    fd_set writefds;
    int maxfds = 0;

    tival.tv_sec = timeout;
    tival.tv_usec = 0;

    FD_ZERO(&writefds);

    if(sock > 0) {
        FD_SET(sock, &writefds);
        maxfds=((sock > maxfds)?sock:maxfds);
    }
    else    {
        sprintf(errorMessage, "Send socket:%d error! return:-2 %s", sock, GetCurrentTime(0, 0));
        return -2;
    }

    ret = select(maxfds + 1, NULL, &writefds, NULL, &tival);
    if(ret <= 0) {
        if(ret < 0)    sprintf(errorMessage, "Send socket:%d select() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));
        else sprintf(errorMessage, "Send socket:%d select timeout(%d)! %s", sock, timeout, GetCurrentTime(0, 0));
        close(sock);
        return -3;
    }
    if(!(FD_ISSET(sock, &writefds)))    {
        sprintf(errorMessage, "Send socket:%d not in writefds! %s", sock, GetCurrentTime(0, 0));
        close(sock);
        return -4;
    }

    while(i < size)    {
        ret = send(sock, buf + i, size - i, flag);
        if(ret <= 0)    {
            sprintf(errorMessage, "Send socket:%d send() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));

            if (EINTR == errno)
              if(intretry < 10)  {intretry++;continue;}
              else sprintf(errorMessage, "Send socket:%d send() error!EINTR 10 times! %s", sock, GetCurrentTime(0, 0));

            close(sock);
            return -1;
        }
        else i += ret;
    }
    sprintf(errorMessage, "Send socket:%d send() OK! %d/%d bytes sent! %s", sock, i, size, GetCurrentTime(0, 0));
    return i;
}

接收数据函数Recv

/*************************关于本函数************************************  
*function_name: Recv  
*参数说明:sock整数型socket,buf接收数据的缓冲区,size要接收数据的大小,flag接收选项,timeout超时时间值  
*purpose: 用来从一个socket在指定时间内读取数据  
*tidied by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.9999mb.com)  
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言  
*date time:2006-07-05 21:10:00  
*Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途  
* 但请遵循GPL  
*Thanks to: Paul Sheer 感谢Paul Sheer在select_tut的man手册里提供了这份源代码  
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力  
*Note:要使用此函数需要自定义一个全局变量char errorMessage[1024];并包含自己编写的GetCurrentTime.h头文件  
*********************************************************************/ 
int  
Recv(int sock, char * buf, size_t size, int flag, int timeout)    
{   
    int i = 0, ret = 0, intretry = 0;   
  
    struct timeval tival;   
    fd_set readfds;   
    int maxfds = 0;   
  
    tival.tv_sec = timeout;   
    tival.tv_usec = 0;   
  
    FD_ZERO(&readfds);   
  
    if(sock > 0) {   
        FD_SET(sock, &readfds);   
        maxfds=((sock > maxfds)?sock:maxfds);   
    }   
    else    {   
        sprintf(errorMessage, "Recv socket:%d error! return:-2 %s", sock, GetCurrentTime(0, 0));   
        return -2;   
    }   
  
    ret = select(maxfds + 1, &readfds, NULL, NULL, &tival);   
    if(ret <= 0) {   
        if(ret < 0)    sprintf(errorMessage, "Recv socket:%d select() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));   
        else sprintf(errorMessage, "Recv socket:%d select timeout(%d)! %s", sock, timeout, GetCurrentTime(0, 0));   
        close(sock);   
        return -3;   
    }   
    if(!(FD_ISSET(sock, &readfds)))    {   
        sprintf(errorMessage, "Recv socket:%d not in readfds! %s", sock, GetCurrentTime(0, 0));   
        close(sock);   
        return -4;   
    }   
    while(i < size)    {   
        ret = recv(sock, buf + i, size - i, flag);   
        if(ret <= 0){   
            sprintf(errorMessage, "Recv socket:%d recv() error! return:%d, errno=%d, errortext:'%s' %s", sock, ret, errno, strerror(errno), GetCurrentTime(0, 0));   
            if(errno == EINTR)      
                if(intretry < 10)  {intretry++;continue;}   
                else sprintf(errorMessage, "Recv socket:%d recv() error! EINTR 10 times! %s", sock, GetCurrentTime(0, 0));   
            close(sock);   
            return -1;   
        }   
        else i += ret;   
    }   
    sprintf(errorMessage, "Recv socket:%d recv() OK! %d/%d bytes received! %s", sock, i, size, GetCurrentTime(0, 0));   
    return i;   
}   

时间: 2024-09-21 16:34:23

Linux常用开发服务器的代码[Linux zhoulifa ]的相关文章

php 常用获取服务器变量代码

define('IP', ip()); define('HTTP_REFERER', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''); define('SCRIPT_NAME', isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : preg_replace("/(.*).php(.*)/i", "\1.php", $_S

《Linux C编程从入门到精通》一第2章 在Linux中编写C语言代码2.1 Linux中C语言程序开发流程和工具介绍

第2章 在Linux中编写C语言代码 Linux C编程从入门到精通 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Lin

《Linux C编程从入门到精通》——第 2 章 在Linux中编写C语言代码 2.1Linux中C语言程序开发流程和工具介绍

第 2 章 在Linux中编写C语言代码 Linux作为一个操作系统,一项重要的功能就是要支持用户编程.传统的UNIX下的程序开发语言是C语言,C语言是一种平台适应性强.易于移植的语言.Linux是用C语言写成的.反过来,Linux又为C语言提供了很好的支持,C语言编译工具gcc.调试工具gdb属于最早开发出来的一批自由软件.因此Linux与C语言形成了完美的结合,为用户提供了一个强大的编程环境,本章将介绍在Linux中编写C语言程序的流程和具体方法. 2.1 Linux中C语言程序开发流程和工

linux平台开发自学笔记(二)-打造IDE

在linux上开发最大的不适应就是找不到win上的vs这种IDE了,当然可以安装一个带图形界面的系统,再装个eclipse或者kde之类的,但是这违反了进入linux平台开发的初衷,linux毕竟不是用来办公,做服务器,它的文字界面更加省能存,更加稳定,更加短小精悍,有时候还需要远程ssh到服务器上,更没有界面可言,所以还是老老实实适应vim吧. 不过vim有很多强大的插件,也可以将vim变成一个不亚于vs一些常见功能的ide,当然还是要去熟悉背一些键盘指令. 0.vim插件的安装都是一个套路,

2017 Linux Kernel 开发报告 Linux 在统治着计算机世界

现在是2017年,Linux 在统治着计算机世界.不相信?Linux 基金会报告说,Linux 运行着 90% 的公共云工作量,世界上 82% 的智能手机,62% 的嵌入式市场,以及几乎占领了 99% 的超级计算机市场.所有的这些都基于 Linux 内核.在 Linux 基金会 2017 的 Linux Kernel 开发报告中,Linux 内核开发者和 LWN.net 的编辑 Jonathan Corbet 以及稳定的 Linux 内核维护者 Greg Kroah-Hartman 报告了 Li

如何搭建linux开发服务器

    在开发过程中,必然会出现多人同时工作.协着的情况,在嵌入式开发项目中更为平常,这样可以加快项目周期,为产品上市占得时间先机.目前,使用linux作为开发产品的操作系统情况越来越多,使用越来越广泛.为了交叉编译,为了最接近开发目标,我们一般都会自己搭建一台linux开发服务器.linux开发服务器一些常用的功能必须支持,比如Samba.nfs.tftp.httpd等.     首先我们需要选择合适的linux操作系统作为服务器的系统,推荐使用Fedora8.Fedora10等,笔者在长期使

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.1 Linux常用命令

2.1 Linux常用命令 嵌入式 Linux应用程序开发标准教程(第2版) 在安装完Linux再次启动之后,就可以进入到与Windows类似的图形化界面了.这个界面就是Linux图形化界面X窗口系统(简称X)的一部分.要注意的是,X窗口系统仅仅是Linux上面的一个软件(或者也可称为服务),它不是Linux自身的一部分.虽然现在的X窗口系统已经与Linux整合得相当好了,但毕竟还不能保证绝对的可靠性.另外,X窗口系统是一个相当耗费系统资源的软件,它会大大地降低Linux的系统性能.因此,若是希

9种企业常用的Linux和Unix服务器

 9种企业常用的Linux和Unix服务器 介绍下9种企业常用的Linux和Unix服务器 1.CentOS:https://www.centos.org/CentOS-5,CentOS-6,CentOS-7:http://wiki.centos.org/Download 2.Debian:https://www.debian.org/Debian 8.0:https://www.debian.org/releases/stable/debian-installer/Old Debian A

常用windows下远程管理Linux服务器的方法

随着互联网的 高速发展以及Linuxhttp://www.aliyun.com/zixun/aggregation/13760.html">企业应用的成熟,Linux被广泛应用于服务器领域,如何实现Linux的远程管理成为 网络管理员的首要任务.我们经常见到的几种最为常用的windows下远程管理Linux服务器的方法,基本上都是利用SecureCRT,F-Secure SSH 抑或是PUTTY等客户端工具通过ssh服务来实现Windows下管理Linux服务器的,这些客户端工具几乎不需要