zoukankan      html  css  js  c++  java
  • Unix/Linux编程实践教程(三:代码、测试)

    测试logfilec.c的时候,有个sendto(sock,msg,strlen(msg),0,&addr,addrlen),编译时提示:

    logfilec.c:30: warning: passing argument 5 of ‘sendto’ from incompatible pointer type

    但是书上是这样写的,在stackoverflow搜了一下,原来是:

    需要进行一个转换。

    另外才注意到C语言中单引号可转义可不转。

    需要用curses库的测试hello1.c,发现没有,需要安装。

    //hello1.c
    #include<stdio.h>
    #include<curses.h>
    #include<stdlib.h>
    
    main()
    {
        initscr();
    
        clear();
        move(10,20);
        addstr("hello,world");
        move(LINES-1,0);
        refresh();
        getch();
        endwin();
    }
    hello1.c

    按照yum的安装,安装失败,yum命令无法成功运行。还是不能成功编译hello1.c。 

    后来网上看才发现CentOS已经默认安装curses,只是编译时需链接库:

    gcc hello1.c -o hello1 -lcurses

    测试bounce1d.c时,提示:

    undefined reference to `set_ticker'

    原来set_ticker这个函数并不包含在库里面,需要自己编写。

    //bounce1d.c
    #include<stdio.h>
    #include<curses.h>
    #include<sys/time.h>
    #include<signal.h>
    #include<string.h>
    
    #define MESSAGE "hello"
    #define BLANK "     "
    
    int row;
    int col;
    int dir;
    
    int main()
    {
        int delay;
        int ndelay;
        int c;
        void move_msg(int);
        int set_ticker(long);
        initscr();
        crmode();
        noecho();
        clear();
    
        row=20;
        col=0;
        dir=1;
        delay=200;
    
        move(row,col);
        addstr(MESSAGE);
        signal(SIGALRM,move_msg);
        set_ticker(delay);
        
        while(1)
        {
            ndelay=0;
            c=getch();
            if(c=='q') break;
            if(c==' ') dir=-dir;
            if(c=='f'&&delay>2) ndelay=delay/2;
            if(c=='s') ndelay=delay*2;
            if(ndelay>0)
                set_ticker(delay=ndelay);
        }
    
        endwin();
        return 0;
    
    }
    
    void move_msg(int signum)
    {
        signal(SIGALRM,move_msg);
        move(row,col);
        addstr(BLANK);
        col+=dir;
        move(row,col);
        addstr(    MESSAGE);
        refresh();
    
        if(dir==-1&&col<=0)
            dir=1;
        else if(dir==1&&col+strlen(MESSAGE)>=COLS)
            dir=-1;
    }
    
    int set_ticker(long n_msecs)
    {
        struct itimerval new_timeset;
        long n_sec,n_usecs;
    
        n_sec=n_msecs/1000;
        n_usecs=(n_msecs%1000)*1000L;
    
        new_timeset.it_interval.tv_sec=n_sec;
        new_timeset.it_interval.tv_usec=n_usecs;
        new_timeset.it_value.tv_sec=n_sec;
        new_timeset.it_value.tv_usec=n_usecs;
    
        return setitimer(ITIMER_REAL,&new_timeset,NULL);
    
    }
    bounce1d.c
  • 相关阅读:
    [转载]Linux 线程实现机制分析
    Linux命令学习总结:cp命令
    ORA-01012: not logged on
    TNS-12540: TNS:internal limit restriction exceeded
    ORACLE临时表空间总结
    ORACLE回收站机制介绍
    SQL Server 2008 R2 Service Pack 3 已经发布
    python中的单下划线和双下划线意义和作用
    redis基本命令的演示:
    redis百度百科和维基百科知识总结:
  • 原文地址:https://www.cnblogs.com/ph829/p/5882611.html
Copyright © 2011-2022 走看看