★实验 8-1 1. 创建一个守候进程。并为自己创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 未使用的内存大小(MemFree) 可以从/proc/meminf

★实验 8-1   
1. 创建一个守候进程。并为自己创建独立的日志文件。
2. 每隔 1s 向日志文件中写入如下信息:
  a) 未使用的内存大小(MemFree) 
可以从/proc/meminfo 获取  
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
void init_deamon(void)
{
    int pid;
    int i;

    if(signal(SIGCHLD,SIG_IGN) == SIG_ERR){
        printf("Cant signal in init_daemon.");
        exit(1);
    }
    if(pid=fork())
        exit(0);
    else if(pid< 0){
        perror("fail to fork1");
        exit(1);
    }

    setsid();

if(pid=fork())
        exit(0);
    else if(pid< 0)
        exit(1);

    for(i=0;i< getdtablesize();++i)
        close(i);
    chdir("/tmp");
    umask(0);
    return;
}
float get_memfree()//从文件/proc/meminfo中读出memfree的值
{
      FILE* fp;
      char buffer[1024];
      size_t bytes_read;
      char* match;
      float memfree;

      fp = fopen ("/proc/meminfo", "r");
      bytes_read = fread (buffer, 1, sizeof (buffer), fp);
      fclose (fp);
      buffer[bytes_read] = '\0';
      match = strstr (buffer, "MemFree");
      if (match == NULL)
      return 0;
      sscanf (match, "MemFree : %f", &memfree); //读取
      return memfree;
}
int main()
{
    FILE *fp;
    init_deamon();

    while(1)
    {
        sleep(1);
        if((fp=fopen("print_memfree","a")) >=0)
        {
           fprintf (fp,"MemFree now is: %4.0f MHz\n", get_memfree ());
           fclose(fp);
        }
    }
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值