Example #1
0
int main()
{
	clink head = NULL;    //循环链表指针
	clink memory = NULL;   //内存管理指针
	clink ptr;

	int list[6] = {1,2,3,4,5,6};   //数组内容
	int i;

	//用循环创建内存链表,总共7个结点
	for(i = 0; i < 7; i++)
	{
		//分配一个结点内存
		ptr = (clink)malloc(sizeof(cnode));
		if(!ptr)  //检查内存指针
		{
			exit(1);
		}

		ptr->next = NULL;  
		ptr->data = 100 + i;  //创建结点内存
		freenode(&memory,ptr);   //释放一个结点内存
	}
	printmemory(memory);   //输出内存链表

	head = createclist(list,&memory,6);    //创建循环链表
	printclist(head);   //输出循环链表

	//循环链表的内存释放
	freeclist(head,&memory);
	printmemory(memory);   //输出内存链表
	
	return 0;
	
}
Example #2
0
File: udp.dns.c Project: ifbe/42
int dns_read_answer(u8* buf, int len)
{
	int j,k;
	say("answer{\n");
	say("name=%02x%02x\n", buf[0], buf[1]);
	say("type=%02x%02x\n", buf[2], buf[3]);
	say("class=%02x%02x\n", buf[4], buf[5]);
	say("ttl=\n");
	say("len=%x\n",buf[11]);
	j = 12;
/*
	j += 12;
	while(1)
	{
		k = buf[j];
		if(k > 100)break;

		say("%.*s", k, buf+j+1);

		j += k+1;
		if(0 == buf[j])break;
		else say(".");
	}
*/
	if(4 == buf[11])say("%d.%d.%d.%d\n",buf[j],buf[j+1],buf[j+2],buf[j+3]);
	j += buf[11];

	printmemory(buf, j);
	say("}\n");
	return j;
}
Example #3
0
File: udp.dns.c Project: ifbe/42
int dnsserver_rootwrite(
	struct element* ele, void* sty,
	struct object* obj, void* pin,
	u8* buf, int len)
{
	say("@dnsserver_rootwrite\n");
	printmemory(buf, len);
	return 0;
}
Example #4
0
int platformread(char* arg)
{
	QWORD addr;

	//read memory
	addr = *(QWORD*)arg;
	addr &= 0xffffffffffff;
	if(addr==0x79726f6d656d)	//'memory'
	{
		if( arg[6] == '.' )	//memory.400000
		{
			myownstr2data(arg+7 , &addr);
			printmemory( (char*)addr , 0x200 );
			return 1;
		}
		else if( arg[6] == '[' )	//memory[from,to]
		{
			say("reading memory[?,?]\n");
			return 2;
		}
		return -100;
	}

	//read gpio
	addr = *(DWORD*)arg;
	if(addr==0x6f697067)
	{
		if( arg[4] == '.' )	//gpio.70
		{
			myownstr2data(arg+7 , &addr);
			say( "gpio.%x\n" , addr );
			return 3;
		}
		else if( arg[4] == '[' )	//gpio[cf8,cfb]
		{
			say("gpio[?,?]\n");
			return 4;
		}
		return -200;
	}

	return -10000;
}
Example #5
0
int
main (int argc, char **argv)
{
  extern char* optarg;
  extern int optind, optopt;
  int c, errflg, backflg, incrflg, nopagflg, pagflg, rank, nranks;
  hid_t fapl, file, group, group1, dset;
  size_t incr, page;
  unsigned iter, level, igroup, idset, maxiter;
  char name[MAX_LEN];
  char g1name[MAX_LEN];
  char g2name[MAX_LEN];
  hsize_t dims[3] = { X, Y, Z };
  float *buf;
  double start, stop;
  double t1, t2;
  char cdum[MAX_LEN];
  int i, memtotal, memfree, buffers, cached, swapcached, active, inactive;
  float fdum;

  assert (MPI_Init (&argc, &argv) >= 0);
  assert (MPI_Comm_rank (MPI_COMM_WORLD, &rank) >= 0);
  assert (MPI_Comm_size (MPI_COMM_WORLD, &nranks) >= 0);

  /* parse arguments */

  backflg = errflg = incrflg = nopagflg = pagflg = 0;
  incr = INCREMENT;
  page = PAGE_SIZE;
  maxiter = MAX_ITER;

  while ((c = getopt(argc, argv, ":bni:t:p:")) != -1)
    {
      switch (c)
      {
      case 'b':
        backflg++;
        break;
      case 'i':
        incrflg++;
        incr = (size_t)atol(optarg);
        if (incr == 0)
          {
            fprintf(stderr,
                    "Option -%c requires a positive integer argument\n", optopt);
            errflg++;
          }
        break;
      case 'n':
        nopagflg++;
        break;
      case 'p':
        pagflg++;
        page = (size_t)atol(optarg);
        if (page == 0)
          {
            fprintf(stderr,
                    "Option -%c requires a positive integer argument\n", optopt);
            errflg++;
          }
        break;
      case 't':
        maxiter = (unsigned)atol(optarg);
        if (maxiter == 0)
          {
            fprintf(stderr,
                    "Option -%c requires a positive integer argument\n", optopt);
            errflg++;
          }
        break;
      case ':':       /* -i or -p without operand */
        fprintf(stderr,
                "Option -%c requires an operand\n", optopt);
        errflg++;
        break;
      case '?':
        fprintf(stderr, "Unrecognized option: -%c\n", optopt);
        errflg++;
        break;
      default:
        errflg++;
        break;
      }
    }
  if (errflg)
    {
      if (rank == 0)
        {
          fprintf(stderr, "usage: . . . ");

          fprintf(stderr, "usage: h5core [OPTIONS]\n");
          fprintf(stderr, "  OPTIONS\n");
          fprintf(stderr, "     -b      Write file to disk on exit\n");
          fprintf(stderr, "     -i I    Memory buffer increment size in bytes [default: 512 MB]\n");
          fprintf(stderr, "     -n      Disable write (to disk) paging\n");
          fprintf(stderr, "     -p P    Page size in bytes [default: 64 MB]\n");
          fprintf(stderr, "     -t T    Number of iterations [default: 5]\n");
          fprintf(stderr, "\n");
          fflush(stderr);
        }

      exit(2);
    }

  if ((backflg == 0) && (pagflg > 0))
    {
      if (rank == 0)
        {
          fprintf(stderr, "The -p has no effect without the -b option");
          fflush(stderr);
        }
    }

  if (pagflg && nopagflg)
    {
      if (rank == 0)
        {
          fprintf(stderr, "The -n and -p options are mutually exclusive.");
          fflush(stderr);
        }
      exit(3);
    }

  /* Let's go! */

  fapl = H5Pcreate (H5P_FILE_ACCESS);
  assert (fapl >= 0);
  assert (H5Pset_libver_bounds (fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) >= 0);
  assert (H5Pset_fapl_core (fapl, incr, (hbool_t) backflg) >= 0);
  if (nopagflg == 0)  /* the user didn't disable paging */
    {
      assert (H5Pset_core_write_tracking (fapl, 1, page) >= 0);
    }

  if (rank == 0)
    {
      printf("\n");
      printf("Write to disk: %s\n", (backflg > 0) ? "YES" : "NO");
      printf("Increment size: %ld [bytes]\n", incr);

      if (nopagflg == 0)
        {
          printf("Page size: %ld [bytes]\n", page);
        }
      else
        {
          printf("Page size: PAGING DISABLED!\n");
        }

      printf("Iterations: %d\n", maxiter);
      printf("\n");
      fflush(stdout);
    }

  buf = (float *) malloc (X * Y * Z * sizeof (float));

  // Get basic memory info on each node, see how memory usage changes
  // after flushing to disk; do we end up back where we started?

  getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active,
             &inactive);

  if (rank == 0)
    {
      fprintf (stdout, "BEFORE RUNNING:\n");
      fflush (stdout);
    }
  for (i = 0; i < nranks; i++)
    {
      if (rank == i)
        {
          printmemory (rank, memtotal, memfree, buffers, cached, swapcached,
                       active, inactive);
        }
      MPI_Barrier (MPI_COMM_WORLD);
    }

  start = MPI_Wtime ();

  /* outer loop - simulated time */
  for (iter = 0; iter < maxiter; ++iter)
    {
      if (rank == 0)
        {
          printf ("Iteration: %u\n", iter);
          assert (fflush (stdout) == 0);
        }

      assert (sprintf (name, "rank%05dtime%04u.h5", rank, iter) > 0);
      file = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
      assert (file >= 0);

      t1 = MPI_Wtime ();

      /* time level */
      for (level = 0; level < MAX_TIME_LEVEL; ++level)
        {
          assert (sprintf (g1name, "level%03d", level) > 0);
          group = H5Gcreate2 (file, g1name, H5P_DEFAULT, H5P_DEFAULT,
                              H5P_DEFAULT);
          assert (group >= 0);

          /* group level */
          for (igroup = 0; igroup < MAX_GROUPS; ++igroup)
            {
              assert (sprintf (g2name, "group%02d", igroup) > 0);
              group1 = H5Gcreate2 (group, g2name, H5P_DEFAULT, H5P_DEFAULT,
                                   H5P_DEFAULT);
              assert (group1 >= 0);

              /* dataset level */
              for (idset = 0; idset < MAX_DATASETS; ++idset)
                {
                  assert (sprintf (name, "dataset%02d", idset) > 0);
                  assert (H5LTmake_dataset_float (group1, name, RANK, dims, buf) >= 0);

#ifdef DEBUG
                  assert (fprintf (stderr,
                                   "rank %i time %i Wrote dataset %s/%s/%s\n",
                                   rank, level, g1name, g2name, name));
                  assert (fflush (stderr) == 0);
#endif
                }

              assert (H5Gclose (group1) >= 0);
            }

          assert (H5Gclose (group) >= 0);
        }

      t2 = MPI_Wtime ();

      assert (fprintf (stdout,
                       "rank %04i Total time for buffering chunks to memory:\t %f seconds\n",
                       rank, t2 - t1));
      assert (fflush (stdout) == 0);

      MPI_Barrier (MPI_COMM_WORLD);    // To keep output less jumbled

      getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active,
                 &inactive);

      if (rank == 0)
        {
          fprintf (stdout, "BEFORE FLUSHING:\n");
          fflush (stdout);
        }

      for (i = 0; i < nranks; i++)
        {
          if (rank == i)
            {
              printmemory (rank, memtotal, memfree, buffers, cached, swapcached,
                           active, inactive);
            }
          MPI_Barrier (MPI_COMM_WORLD);
        }

      /* close the file */
      t1 = MPI_Wtime ();
      assert (H5Fclose (file) >= 0);
      t2 = MPI_Wtime ();

      getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active,
                 &inactive);

      if (rank == 0)
        {
          fprintf (stdout, "AFTER FLUSHING:\n");
          fflush (stdout);
        }

      for (i = 0; i < nranks; i++)
        {
          if (rank == i)
            {
              printmemory (rank, memtotal, memfree, buffers, cached, swapcached,
                           active, inactive);
              assert (fprintf (stdout, "rank %04i Total time for flushing to disk:\t\t %10.2f seconds\n", rank, t2 - t1));
              assert (fflush (stderr) == 0);
            }
          MPI_Barrier (MPI_COMM_WORLD);
        }
    }

  stop = MPI_Wtime ();
  MPI_Barrier (MPI_COMM_WORLD);

  if (rank == 0)
    {
      printf ("Total time: %f s\n", stop - start);
      printf ("Aggregate bandwidth per process: %f GB/s\n",
              ((float) X * Y * Z * sizeof (float)) *
              ((float) MAX_DATASETS * MAX_GROUPS * MAX_TIME_LEVEL * MAX_ITER) /
              (1024.0 * 1024.0 * 1024.0 * (stop - start)));
    }

  free ((void *) buf);

  assert (H5Pclose (fapl) >= 0);

  assert (MPI_Finalize () >= 0);

  return 0;

}
Example #6
0
File: udp.dns.c Project: ifbe/42
int dns_read_query(u8* buf, int len)
{
	printmemory(buf, len);
	return len;
}