Esempio n. 1
0
int main()
{
	int card_val = assign_val();



	
	return 0;
}
int main()
{
  int t=100;
  int *p;
  int *q=&t;
  p=&t;
  //*p say as goto address stored in p
  //*p is the value stored at the memory address stored in the block p
  //t   |10|   at address 12345
  //p   |12345| at address 12353
  //*p  dereferences the address stored at p and fetches the value at that address.
  //that is why while running this code, only difference in o/p is values of &p &q are different.
  // because they are different pointer vars at different memory locations
  printf("&t = %u\t, *p = %d\t, &p = %u\t, p = %u\t\n",&t, *p, &p, p);

  printf("&t = %u\t, *q = %d\t, &q = %u\t, q = %u\t\n",&t, *q, &q, q);

  //////////////////arithmatic////////////////////////////


  int n[3] = {12,22,43};
  int *int_p = n; // for array , u can use name of array as reference to the start of the block of memory, where, array resides
  printf("++*int_p=%u\n", ++*int_p);//prints 13, * has preced over +, so forst derefer value at int_p, ie 12, the ++12 = 13

  printf("*++int_p=%u\n", *++int_p);//prints 22, *(++int_p) = *(&(n+1)) = 22, now int_p points to int_p+1, ie 4 bytes agter int_p,
                                    //now, int_p = &n[1]

  printf("*(int_p+1)=%u\n", *(int_p+1));//prints 43,

  printf("*(int_p+1)=%u\n", *(int_p+2));//prints garbage, since out of array print.


  //////////////////////pass by reference////////////////////////////
  int a=1, b=10;
  printer(&a, &b);
  printf("a=%d,b=%d\n",a,b);



  /////////////////return struct//////////////////////////////////
  //check out the struct and the function assign_val() at the top.
  //
  COORD *point; // declares a pointer of type COORD
  point = assign_val(); // assign_val returns a 'pointer' to COORD XXX not a COORD object, so assigned to a pointer

  printf("x=%f,y=%f,z=%f\n", (point)->x, point->y, point->z); // xyz are accessed in this fashion

  ///////////////////////////////////////////////////////alternate techniue
  COORD pnt;
  pnt = *assign_val();
  printf("x=%f,y=%f,z=%f\n", pnt.x, pnt.y, pnt.z);
  // so use '->' for accesing struct vars with a object pointer,
  // so use '.' for accesing struct vars with a normal object,

  ///////////////////array and pointers////////////////////////////

  char achr[] = {'R', 'o', 'n', '\0'};
  char *c_p;
   c_p= achr; // points to the first elem of char array
  printf ("name  = %c\n", *c_p);

  printf("Elems: ");
  for (int i=0;i<strlen(achr);i++)
  {
    printf("%c", *c_p);
    c_p++;
  }

  printf("\n");
/*
pointers and arrays are different:

A pointer is a variable. We can do
pa = a and pa++.
An Array is not a variable. a = pa and a++ ARE ILLEGAL.
*/
////////////////////////////////////////////////Array of Pointers///////////////////////////////////////

//declare array with text seperated by \n


char s_b[] = {"pallavi\n"};
char s_c[] = {"priyal\n"};

char s_a[] = {"nilesh\n"};
char *s_d = {"ronak\n"};//this is a legal operation

printf("String %d =%s\n",1,s_d);//Thats how u print a string using pointers


char *ptr_arr[] = {s_a, s_b, s_c, s_d};
for (int x = 0; x< 4; x++){
printf("String %d =%s\n",x+1,ptr_arr[x]);
}

printf("\n comp val:%d",strcmp(s_b,s_c));









  printf("\n");



  //////////////////////////////////////////////////END/////////////////////////////////////////////////
  return 0;
} 
Esempio n. 3
0
/*
 * Failover the gtm ------------------------------------------------------
 */
int
failover_gtm(void)
{
	char date[MAXTOKEN+1];
	char *stdIn;
	int rc;
	FILE *f;
	
	elog(INFO, "Failover gtm\n");
	if (!isVarYes(VAR_gtmSlave) || (sval(VAR_gtmSlaveServer) == NULL) || is_none(sval(VAR_gtmSlaveServer)))
	{
		elog(ERROR, "ERROR: GTM slave is not configured. Cannot failover.\n");
		return(1);
	}
	
	if (do_gtm_ping(sval(VAR_gtmSlaveServer), atoi(sval(VAR_gtmSlavePort))) != 0)
	{
		elog(ERROR, "ERROR: GTM slave is not running\n");
		return(1);
	}

	/* Promote the slave */
	elog(NOTICE, "Running \"gtm_ctl promote -Z gtm -D %s\"\n", sval(VAR_gtmSlaveDir));
	rc = doImmediate(sval(VAR_gtmSlaveServer), NULL, 
					 "gtm_ctl promote -Z gtm -D %s", sval(VAR_gtmSlaveDir));
	if (WEXITSTATUS(rc) != 0)
	{
		elog(ERROR, "ERROR: could not promote gtm (host:%s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir));
		return 1;
	}

	/* Configure promoted gtm */
	if ((f = prepareLocalStdin(newFilename(stdIn), MAXPATH, NULL)) == NULL)
		return(1);
	fprintf(f,
			"#===================================================\n"
			"# Updated due to GTM failover\n"
			"#        %s\n"
			"startup = ACT\n"
			"#----End of reconfiguration -------------------------\n",
			timeStampString(date, MAXTOKEN+1));
	fclose(f);
	elog(NOTICE, "Updating gtm.conf at %s:%s\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir));
	rc = doImmediate(sval(VAR_gtmSlaveServer), stdIn, "cat >> %s/gtm.conf", sval(VAR_gtmSlaveDir));
	if (WEXITSTATUS(rc) != 0)
	{
		elog(ERROR, "ERROR: could not update gtm.conf (host: %s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir));
		return 1;
	}

	/* Update and backup configuration file */
	if ((f = prepareLocalStdin(stdIn, MAXPATH, NULL)) == NULL)
		return(1);
	fprintf(f,
			"#===================================================\n"
			"# pgxc configuration file updated due to GTM failover\n"
			"#        %s\n"
			"gtmMasterServer=%s\n"
			"gtmMasterPort=%s\n"
			"gtmMasterDir=%s\n"
			"gtmSlave=n\n"
			"gtmSlaveServer=none\n"
			"gtmSlavePort=0\n"
			"gtmSlaveDir=none\n"
			"#----End of reconfiguration -------------------------\n",
			timeStampString(date, MAXTOKEN+1),
			sval(VAR_gtmSlaveServer),
			sval(VAR_gtmSlavePort),
			sval(VAR_gtmSlaveDir));
	fclose(f);
	rc = doImmediate(NULL, stdIn, "cat >> %s", pgxc_ctl_config_path);
	if (WEXITSTATUS(rc) != 0)
	{
		elog(ERROR, "ERROR: could not update gtm.conf (host: %s, dir:%s)\n", sval(VAR_gtmSlaveServer), sval(VAR_gtmSlaveDir));
		return 1;
	}
	freeAndReset(stdIn);
	backup_configuration();

	/* Reconfigure myself */
	assign_val(VAR_gtmMasterServer, VAR_gtmSlaveServer); reset_var(VAR_gtmSlaveServer);
	assign_val(VAR_gtmMasterPort, VAR_gtmSlavePort); reset_var(VAR_gtmSlavePort);
	assign_val(VAR_gtmMasterDir, VAR_gtmSlaveDir); reset_var(VAR_gtmSlaveDir);
	assign_sval(VAR_gtmSlaveServer, "none");
	assign_sval(VAR_gtmSlavePort, "0");
	assign_sval(VAR_gtmSlaveDir, "none");
	assign_sval(VAR_gtmSlave, "n");

	return 0;
}