zongliang 的个人资料uinux c 编程 生活照片日志列表 工具 帮助

日志


8月20日

招贤纳士

职位有效期:2008-8-202008-10-20

 有意的联系偶^_^!!

 

职位1-职位名称:兼职网站美工设计师(杭州)

岗位职责:
对公司的中英文网站进行界面改版、网站设计、栏目规划、页面制作。


任职资格:

1.
美术设计或相关专业毕业;

2.
有良好的美术功底和丰富的网站界面设计经验,富有创新能力;

3.
精通PhotoShopDreamWeaverFireworkFlash等至少两种软件工具;

4.
熟悉CSS+DIV在主流浏览器的页面布局,熟悉javascript

5.
二年以上网站美工相关工作经验,有大型门户网站工作经历优先;

6.
有较好的英语阅读能力;

7.
请提供本人独立完成的相关作品。

 

 

职位2-职位名称:产品经理(北京)

岗位职责:
1
、根据公司的发展战略和经营计划,拓展项目合作渠道;

2
负责公司roadmap,产品规划、产品操作系统release
3
销售工具,ppt,竞争对手分析
4
售后培训资料编写以及公司网站的内容提供
5
协调、管理、控制和监督项目实施进度、成本、质量等相关事宜
6
负责管理跟踪大型软件项目的实施
7
有效的实施售后管理工作,降低售后管理的成本。

 

任职资格:

1、有行业背景及3年以上相关工作经验,具有大型软件设计和开发经验;

2、具有丰富的项目管理经验,优秀的沟通协调和解决问题能力,良好的团队合作意识、丰富的团队建设经验

3、有做过网络设备的产品经理工作经验;

4、工作主动性高,敢于承担压力及责任;

5、具备较好的口头、书面表达和沟通能力;

6、懂得客户管理,能够作为一线人员深度挖掘客户的需求; 

7、有相关技术背景更佳;

 

 

职位3-职位名称:中试工程师(北京)

岗位职责:
负责FPGA卡的硬件开发、调试和维护


任职资格:

1.
熟悉数字电路设计原理,熟悉硬件开发流程;

2.
能独立完成原理图设计,有较强的PCB layout经验,熟练使用AutoCad, protelCadenceEDA工具;

3.
FPGAASIC大型开发工具使用经验,了解Xilinx公司、Altera公司、Actel公司等FPGA器件,有相关应用开发经验;

4.
具有DDRPCI等高速接口设计和调试经验;

5.
对元器件采购、PCB生产和焊接工艺有一定的了解;

6.
本科以上学历,较好的英语阅读能力,较好的合作精神。

 

 

职位4-职位名称:测试经理(杭州)

岗位职责:

1、招聘,管理,维护和指导QA工程师,为多个同时的工程制定测试计划和分配资源;

2、设计和开发用来支持功能测试,自动化回归测试,性能测试和压力测试的测试基础结构;

3、与工程师和产品市场团队合作,复审和理解功能需求。参与产品需求和设计的复审;

4定义和开发测试计划和发布流程,并选择合适的QA工具来开发,执行测试和分析测试结果。开发测试计划和测试用例的框架和模板;

5、执行手动和自动化的测试,报告测试结果。在考虑用户认知,功能,可用性,性能等多方面后,在验证周期内评估和报告问题的严重性和优先级;

6、帮助不断的完善开发.坚持不断的改进,无论是QA过程,开发过程,bug的修正,验证需求或复审软件设计;

 

任职资格:

1、  具有C/C++x86指令集的汇编语言,windows的架构,文件系统的知识;

2、  必须具备测试过程和测试方法的知识。具备软件开发生命周期(SDLC)QA经验;

3、  有设计和开发测试计划,测试工具;自动化回归测试,性能测试,压力测试的经验;

4、  TCP/IP, HTTP, HTTPS, SMTP, MIME编码的知识;

5、  熟悉Linux, Apache, Mysql PHP的安装和优化;

6、  优秀的书写和口头表达能力.英语流利。

 

 

职位5-职位名称:中高级病毒分析工程师(杭州)

部门经理:杨赵勇

岗位职责:

1、  收集/鉴定病毒程序

2、  创建检测病毒的特征码

3、  提供病毒分析报告

4、  研究病毒的发展趋势,提供更好的检测方法

5、  配合部门主管完成相关任务目标

任职资格:

1、  计算机及其相关专业本科以上学历

2、  熟悉Win32汇编语言,能熟练使用常用的逆向分析工具

3、  熟悉Win32程序开发,PE文件结构,及常见Pack代码

4、  熟悉JavaScript/VBScript;

5、  有一定的逆向工作/反病毒工作经验

6、  有良好的沟通能力和协作精神, 较强的学习能力和独立工作能力。

 

8月15日

Linux网络通信实例(TCP和UDP)

Linux网络通信实例(TCP和UDP)

 引自:http://blog.ccidnet.com/blog-htm-do-showone-uid-34371-type-blog-itemid-144194.html

====================================TCPServer.c=====================================
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
//#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
//#include <sys/wait.h>

int main()
{
     int sockfd, new_fd;
     int sin_size, numbytes;
     struct sockaddr_in addr, cliaddr;
     socklen_t addr_len;
     /*******************************************************************
     * 建立一個tpcip server 連線, 並取得裝置描述 m_nSockfd
     *******************************************************************/
     if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
     {
           perror("createSocket");
           return -1;
     }
     /*******************************************************************
     * 初始化 sockadd_in 結構
     *******************************************************************/                  
     memset(&addr, 0, sizeof(addr));
     addr.sin_family = AF_INET;
     addr.sin_port = htons(15800);
     addr.sin_addr.s_addr = htonl(INADDR_ANY);
     //绑定套接口
     if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr))==-1)
     {
           perror("bind");
           return -1;
     }
     //创建监听套接口
     if(listen(sockfd,10)==-1)
     {
           perror("listen");
           return -1;
     }
     char buff[1024];
     //等待连接
     while(1) {
           sin_size = sizeof(struct sockaddr_in);
           perror("server is run");
           //如果建立连接,将产生一个全新的套接字      
           if((new_fd = accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size))==-1)
           {
                 perror("accept");
                 return -1;
           }
           //生成一个子进程来完成和客户端的会话,父进程继续监听
           if(!fork())
           {
                 //读取客户端发来的信息
                 while(1)
                 {
                 memset(buff,0,sizeof(buff));
                 if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1)
                 {
                       perror("recv");
                       return -1;
                 }
                 printf("buff=%s\n",buff);
                 //将从客户端接收到的信息再发回客户端
                 if(send(new_fd,buff,strlen(buff),0)==-1)
                       perror("send");
                 }
                 close(new_fd);
                 return 0;
           }
           close(new_fd);
     }
     close(sockfd);
}



================================TCPClient.c=========================================
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

int main(int argc,char *argv[])
{
     if(argc!=2)
     {
           printf("%s: IPAddress\n",argv[0]);
           return ;
     }
     int sockfd,numbytes;
     char buf[100];
     struct hostent *he;
     struct sockaddr_in their_addr;int i = 0;
     //将基本名字和地址转换
     he = gethostbyname(argv[1]);
     //建立一个TCP套接口
     if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
     {
           perror("socket");
           exit(1);
     }
     //初始化结构体,连接到服务器的2323端口
     their_addr.sin_family = AF_INET;
     their_addr.sin_port = htons(15800);
     their_addr.sin_addr = *((struct in_addr *)he->h_addr);
     bzero(&(their_addr.sin_zero),8);
     //和服务器建立连接
     if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
     {
           perror("connect");
           exit(1);
     }
     //向服务器发送字符串
     while(1)
     {
           scanf("%s",&buf);
           if(send(sockfd,buf,strlen(buf),0)==-1)
           {
                 perror("send");
                 exit(1);
           }
           memset(buf,0,sizeof(buf));
           //接受从服务器返回的信息
           if((numbytes = recv(sockfd,buf,100,0))==-1)
           {
                 perror("recv");
                 exit(1);
           }
           buf[numbytes] = '\0';
           printf("result:%s\n",buf);
     }
     close(sockfd);
     return 0;
}


=======================================UDPServer.c====================================
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERV_PORT 15811
#define MAXLINE 100
void dg_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen)
{
     int n;
     socklen_t len;
     char mesg[MAXLINE];
     for(;;)
     {
           len = clilen;
           memset(mesg,0,sizeof(mesg));
           n=recvfrom(sockfd,mesg,MAXLINE,0,pcliaddr,&len);
           printf("Recv:%s\n",mesg);
           sendto(sockfd,mesg,n,0,pcliaddr,len);
     }
}
int main(int argc, char **argv)
{
     int sockfd;
     struct sockaddr_in servaddr,cliaddr;
     sockfd=socket(AF_INET, SOCK_DGRAM, 0);
     bzero(&servaddr, sizeof(servaddr));
     servaddr.sin_family = AF_INET;
     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
     servaddr.sin_port = htons(SERV_PORT);
     bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
     dg_echo(sockfd, (struct sockaddr *)&cliaddr,sizeof(cliaddr));
}

==================================UDPClient.c===================================
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#define SERV_PORT 15811
#define MAXLINE 100
int main(int argc, char **argv)
{
     int sockfd,so_broadcast;
     struct sockaddr_in servaddr;
     if( argc!=2 )
           perror("usage:udpclient<IPaddress>");
     bzero(&servaddr, sizeof(servaddr));
     servaddr.sin_family = AF_INET;
     servaddr.sin_port = htons(SERV_PORT);
     char sendline[MAXLINE];
     char recvline[MAXLINE];
     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
     //設置广播属性
     if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &so_broadcast, sizeof(so_broadcast)))
     {
           perror("setsockopt");
           return ;
     }
     if (sockfd == -1)
     {
           perror("socket");
           return ;
     }
     while(fgets(sendline, MAXLINE,stdin)!=NULL)
     {
           //指定发送的IP(可以如192.168.18.255--多播),以下两方法皆可
           inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
           //servaddr.sin_addr.s_addr = inet_addr(argv[1]);
           sendto(sockfd,sendline,strlen(sendline),0,(struct sockaddr *)&servaddr,sizeof(servaddr));
           memset(recvline,0,sizeof(recvline));
           int n=recvfrom(sockfd,recvline,MAXLINE,0,NULL,NULL);
           if(n>0)
                 fputs(recvline,stdout);
     }
     exit(0);
}

8月12日

shell基础:输入和输出(echo,read,cat,管道,tee,重定向等)

实验环境:Redhat 9.0,Redhat EL AS 4.0
 
echo:
-------------------------------------------------------------------------
 
在LINUX中,要使转义符生效,需加参数-e

从echo的变量开始说起
如:echo命令输出转义符以及变量
# echo -e "\007your home is $HOME , you are connected on `tty`"
your home is /root , you are connected on /dev/pts/1
# echo -e "\ayour home is $HOME , you are connected on `tty`"
your home is /root , you are connected on /dev/pts/1
#
本例中
\007或\a你可以让终端铃响一声,显示出$HOME目录,并且可以让系统执行tty命令(注意,该命令用键盘左上角的符号,不是单引号)
在echo命令输出之后附加换行,可以使用\ n选项:
$ cat > echod
#!/bin/sh
echo -e "this echo's 3 new lines\n\n\n"
echo "OK"
运行输出如下:
$ ./echod
this echo's 3 new lines



OK
$
 
在e c h o语句中使用跳格符,记住别忘了加反斜杠\:
$ echo -e "here is a tab\there are two tabs\t\tok"
here is a tab   here are two tabs               ok
$
 
把一个字符串输出到文件中,使用重定向符号>。
在下面的例子中一个字符串被重定向到一个名为myfile的文件中:
$ echo "The log files have all been done"> myfile
 
或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:
$ echo "$LOGNAME carried them out at `date`">>myfile
现在让我们看一下myfile文件中的内容:
The log files have all been done
sam carried them out at 六 11月 13 12:54:32 CST 2004
 
引号是一个特殊字符,所以必须要使用反斜杠\来使shell忽略它的特殊含义。
假设你希望使用echo命令输出这样的字符串:“/dev/rmt0”,那么我们只要在引号前面加上反斜杠\即可:
$ echo "\"/dev/rmt0"\"
"/dev/rmt0"
$
 
read:
------------------------------------------------------------------------------
 
[sam@chenwy sam]$ vi var_test
#!/bin/sh
#var_test
echo -e "First Name :\c"
read first
echo -e "Middle Name :\c"
read middle
echo -e "Last name :\c"
read last
echo $first $middle $last
 
[root@first ~]# read a b c d
1 2 3 4
[root@first ~]# echo $a
1
[root@first ~]# echo $b
2
[root@first ~]# echo $c
3
[root@first ~]# echo $d
4
[root@first ~]# echo $a $b $c $d
1 2 3 4
 
这是在"man bash"中的一段:
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
    One  line  is  read  from  the  standard input, or from the file descriptor fd supplied as an argument to the -u option, and  the first word is assigned to the first name, the second word to the second name, and so on, with leftover words and their  intervening  separators  assigned  to the last name.  If there are fewer words read from the input stream than names, the remaining names are  assigned  empty  values.  The characters in IFS are used to split the line into words.  The backslash character (\)  may  be used  to  remove any special meaning for the next character read and for line continuation.  Options, if supplied, have the  following meanings:
    -a aname
    The words are assigned to sequential indices of the array variable aname, starting at 0.  aname is unset before any new  values  are  assigned.   Other  name  arguments  are ignored.
    -d delim
    The first character of delim is  used  to  terminate  the input line, rather than newline.
    -e     If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
    -n nchars
    read returns after reading nchars characters rather  than waiting for a complete line of input.
    -p prompt
    Display prompt on standard error, without a trailing newline, before attempting to read any input.  The prompt is displayed only if input is coming from a terminal.
   -r     Backslash does not act as an escape character.  The backslash is considered to be part of the line.  In  particular,  a  backslash-newline pair may not be used as a line continuation.
   -s     Silent mode.  If input is coming from a terminal, characters are not echoed.
   -t timeout
   Cause  read  to time out and return failure if a complete line of input is not read within timeout  seconds.  This option  has  no  effect if read is not reading input from the terminal or a pipe.
    -u fd  Read input from file descriptor fd.

    If no names are supplied, the line read is assigned to the ariable  REPLY.   The  return  code  is zero, unless end-of-file is ncountered, read times out, or an invalid  file  descriptor  is supplied as the argument to -u.
 
 
read -p "how old r u? " age
echo $age
read -p "some words? " -a words
echo ${words[*]}
read -p "Password: " -s passwd                                 
echo $passwd
read -t 5 auth
echo $auth
read -n 1 key
read -dq -p "input something end with q: " menu
read -e file #在这试试命令历史和补齐功能
 
cat:
--------------------------------------------------------------------
 
cat:显示文件内容,创建文件,还可以用它来显示控制字符。

注意:在文件分页符处不会停下来;会一下显示完整个文件。因此,可以使用more命令或把pg命令的输出通过管道传递到另外一个具有分页功能的命令中,使用命令less file可实现相同的功能。

如下形式
$ cat myfile | more 或 $ cat myfile | pg
 
cat命令的一般形式为:
cat [options] filename1 ... filename2 ...
 
1、显示名为myfile的文件:
$ cat myfile
2、显示myfile1、myfile2、myfile3这三个文件,可以用:
$ cat myfile1 myfile2 myfile3
3、创建一个包含上述三个文件的内容,名为bigfile的文件,可以用输出重定向到新文件中:
$ cat myfile1 myfile2 myfile3 > bigfile
4、如果cat的命令行中没有参数,输入的每一行都立刻被cat命令输出到屏幕上,输入完毕后按<CTRL-D>结束
$ cat
Hello world
Hello world  
<ctrl+d>
$
5、新建文件
$cat >myfile
This is great
<ctrl-d>
$cat myfile
This is great
 
cat:参数选项

使用方式:
cat [-AbeEnstTuv] [--help] [--version] fileName
说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting 显示非打印字符
 
cat 还可以在您查看包含如制表符这样的非打印字符的文件时起帮助作用。您可以用以下选项来显示制表符:
* -T 将制表符显示为 ^I
* -v 显示非打印字符,除了换行符和制表符,它们使用各自效果相当的“控制序列”。例如,当您处理一个在 Windows 系统中生成的文件时,这个文件将使用 Control-M(^M)来标记行的结束。对于代码大于 127 的字符,它们的前面将会被加上 M-(表示“meta”),这与其它系统中在字符前面加上 Alt- 相当。
* -E 在每一行的结束处添加美元符($)。
 
 
tee:
------------------------------------------------------------------
 
tee:读取标准输入的数据,并将其内容输出成文件。

  语   法:tee [-ai][--help][--version][文件…]
  补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。

  参   数:-a 附加到既有文件的面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数,数据会新增在该文件内容的最面,而不会删除原先之内容。
       -i 忽略中断信号
       --help 在线帮助
       --version 显示版本信息
 
列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:
$ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3
把列出当前目录,并把结果结到myfile里
$ ls -l |tee myfile
 
 
管道:可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为
命令1 |命令2
其中|是管道符号。
 
 
标准输入、输出和错误

当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
下面就是这些文件描述符及它们通常所对应的文件名:
文件文件描述符
输入文件—标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
输出文件—标准输出1:它是命令的输出,缺省是屏幕,也可以是文件。
错误输出文件—标准错误2:这是命令错误的输出,缺省是屏幕,同样也可以是文件。
 
在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。下面列出了最常用的重定向组合,并给出了相应的文件描述符。
在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。
 
常用文件重定向命令:
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename 2文件
作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入