zoukankan      html  css  js  c++  java
  • 20135316王剑桥 linux第十一周课实验笔记

    getenv函数
    1.获得环境变量值的函数
    2.参数是环境变量名name,例如”HOME”或者”PATH”。如果环境变量存在,那么getenv函数会返回环境变量值,即value的首地址;如果环境变量不存在,那么getenv函数返回NULL
    setenv函数
    1.修改或添加环境变量的函数
    2.将name设置成value
     
    1.如果name在环境中不存在,那么很好办,在环境中添加这个新的变量就OK。
    setenv函数必须在environment list中增加一个新的entry,然后动态申请存储空间来存储name=value,并且使entry指向该空间。
    2.如果在环境中name已经存在,那么

    (a)若overwrite非0,那么更新name的value(实质是更新环境表,指向新的value);

    (b)若overwrite为0,则环境变量name不变,并且也不出错。

    setenv函数不必在environment list中增加一个新的entry。当overwrite为0, 则不必改动entry的指向;当overwrite非0, 则直接使该entry指向name=value,当然该name=value也是存储在动态申请的内存里。

    sigactdemo2

    include <unistd.h>#include <signal.h>#include <stdio.h>

    void sig_alrm( int signo ){
    /do nothing/
    }
    unsigned int mysleep(unsigned int nsecs){
    struct sigaction newact, oldact;
    unsigned int unslept;

    newact.sa_handler = sig_alrm;
    sigemptyset( &newact.sa_mask );
    newact.sa_flags = 0;
    sigaction( SIGALRM, &newact, &oldact );
    
    alarm( nsecs );
    pause();
    
    unslept = alarm ( 0 );
    sigaction( SIGALRM, &oldact, NULL );
    
    return unslept;
    

    }
    int main( void ){
    while( 1 )
    {
    mysleep( 2 );
    printf( "Two seconds passed " );
    }
    return 0;
    }

    每两秒输出一次

    sigdemo1

    include <stdio.h>#include <signal.h>void f(int); int main(){

    int i;
    signal( SIGINT, f );        
    for(i=0; i<5; i++ ){        
        printf("hello
    ");
        sleep(2);
    }
    
    return 0;
    

    }
    void f(int signum) {
    printf("OUCH! ");
    }

    连续输出五个hello,每两个间隔是两秒
    在这期间,每次输入的Ctrl+C都被处理成打印OUCH

    .testbuf3.c文件

    include <stdio.h>

    int main()
    {
        fprintf(stdout, "1234", 5);
        fprintf(stderr, "abcd", 4);
    }
    【关于fprintf函数】
    函数原型:int fprintf(FILE *stram,const char *format,[argument]);第一个参数是文件指针,第二是输出格式,第三个是附加参数列表。也就是说,该函数会根据指定的格式(format)向输出流(stream)中写入数据(argument)。

    fifo
    生产者和消费者问题

    forkdemo3
     
    代码如下:

    include <stdio.h>#include <stdlib.h>#include <unistd.h>

    int main()
    {
    int fork_rv;

    printf("Before: my pid is %d
    ", getpid());
    
    fork_rv = fork();       /* create new process   */
    
    if ( fork_rv == -1 )        /* check for error  */
        perror("fork");
    else if ( fork_rv == 0 ){ 
        printf("I am the child.  my pid=%d
    ", getpid());
    
        exit(0);
    }
    else{
        printf("I am the parent. my child is %d
    ", fork_rv);
        exit(0);
    }
    
    return 0;
    

    }
     
    fork产生子进程,父进程返回子进程pid,不为0,所以输出父进程的那句话,子进程返回0,所以会输出子进程那句话。
     
    结果如下:

  • 相关阅读:
    SQL群集多实例卸载、安装
    Java 数组的 12 个方法
    Java 容器
    RDA 升级
    DVB条件接收系统多密技术的设计与实现
    perl数组的长度与元素个数
    TS流解析 四
    Python中操作myslq的方法
    DVB-subtitle解析流程浅
    JAVA回调机制(CallBack)详解
  • 原文地址:https://www.cnblogs.com/20135316wjq/p/5005991.html
Copyright © 2011-2022 走看看