title: How to get uptime of command in socket
body: <p>The task was to write a program using INET domain, so I did. But there is one small thing to do that I don't know how to perform. 
  the first non-blank character of the input line
  is 'u', the server will send to the client the output of the 'uptime' command executed on the server's
  host. </p>
  
  <p>Program is running under Linux(Ubuntu).</p>
  
  <p>Which could be like:</p>
  
  <pre><code>    if (strcmp(send_data , "u") == 0 || strcmp(send_data , "U") == 0)
      {
          send(sock, uptimevar, strlen(uptimevar), 0);               
      }
  </code></pre>
  
  <p>But how to get uptime of any command in C?</p>
  
  <p>Server Code:</p>
  
  <pre><code>/* tcpserver.c */
  
  #include &lt;sys/types.h&gt;
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;arpa/inet.h&gt;
  #include &lt;sys/sysinfo.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;unistd.h&gt;
  #include &lt;errno.h&gt;
  #include &lt;string.h&gt;
  
  int main()
  {
  int sock, connected, bytes_recieved , true = 1;  
  char send_data [1024] , recv_data[1024];       
  
  struct sockaddr_in server_addr,client_addr/*, sysinfo*/;    
  int sin_size;
  
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      perror("Socket");
      exit(1);
  }
  
  if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&amp;true,sizeof(int)) == -1) {
      perror("Setsockopt");
      exit(1);
  }
  
  server_addr.sin_family = AF_INET;         
  server_addr.sin_port = htons(1237);     
  server_addr.sin_addr.s_addr = INADDR_ANY; 
  bzero(&amp;(server_addr.sin_zero),8); 
  
  if (bind(sock, (struct sockaddr *)&amp;server_addr, sizeof(struct sockaddr))
                                                                 == -1) {
      perror("Unable to bind");
      exit(1);
  }
  
  if (listen(sock, 5) == -1) {
      perror("Listen");
      exit(1);
  }
  
  printf ("\nTCPServer Waiting for client on port 5000");
      fflush(stdout);
  while(1)
  {  
  
      sin_size = sizeof(struct sockaddr_in);
  
      connected = accept(sock, (struct sockaddr *)&amp;client_addr,&amp;sin_size);
  
      printf("\n I got a connection from (%s , %d)",
             inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
  
      while (1)
      {
          printf("\n SEND (q or Q to quit) : ");
          fgets(send_data, sizeof(send_data), stdin);
  
          if (strcmp(send_data , "q") == 0 || strcmp(send_data , "Q") == 0)
          {
            send(connected, send_data,strlen(send_data), 0); 
            close(connected);
            break;
          }
  
          else 
          {
              send(connected, send_data,strlen(send_data), 0);  
              //printf("Uptime = %ld\n", connected.uptime);
  
              bytes_recieved = recv(connected,recv_data,1024,0);
  
              recv_data[bytes_recieved] = '\0';
          }
          if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
          {
            close(connected);
            break;
          }
  
          else {
              printf("\n RECIEVED DATA = %s " , recv_data);
              fflush(stdout);   
          }
      }
  }       
  close(sock);
  return 0;
  }
  </code></pre>
  
  <p>Client Code:</p>
  
  <pre><code>/* tcpclient.c */
  
  #include &lt;sys/socket.h&gt;
  #include &lt;sys/types.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;netdb.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;unistd.h&gt;
  #include &lt;errno.h&gt;
  
  
  int main()
  {
  
  int sock, bytes_recieved;  
  char send_data[1024],recv_data[1024];
  struct hostent *host;
  struct sockaddr_in server_addr;  
  
  host = gethostbyname("127.0.0.1");
  
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      perror("Socket");
      exit(1);
  }
  
  server_addr.sin_family = AF_INET;     
  server_addr.sin_port = htons(1237);   
  server_addr.sin_addr = *((struct in_addr *)host-&gt;h_addr);
  bzero(&amp;(server_addr.sin_zero),8); 
  
  if (connect(sock, (struct sockaddr *)&amp;server_addr,
              sizeof(struct sockaddr)) == -1) 
  {
      perror("Connect");
      exit(1);
  }
  
  while(1)
  {
      bytes_recieved=recv(sock,recv_data,1024,0);
      recv_data[bytes_recieved] = '\0';
  
      if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
      {
          close(sock);
          break;
      }
  
      else 
      {
          printf("\nRecieved data = %s " , recv_data);
          printf("\nSEND (q or Q to quit) : ");
          fgets(send_data, sizeof(send_data), stdin);
      } 
      if (strcmp(send_data , "q") == 0 || strcmp(send_data , "Q") == 0)
      {
          send(sock, send_data, strlen(send_data), 0);   
          close(sock);            
          break;
      }
      else
      {
          send(sock,send_data, strlen(send_data), 0);           
      }
  }   
  return 0;
  }
  </code></pre>
  
  <p>Modification:</p>
  
  <pre><code>/* tcpserver.c */
  
  #include &lt;sys/types.h&gt;
  #include &lt;sys/socket.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;arpa/inet.h&gt;
  #include &lt;sys/sysinfo.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;unistd.h&gt;
  #include &lt;errno.h&gt;
  #include &lt;string.h&gt;
  
  int main()
  {
  int sock, connected, bytes_recieved , true = 1;  
  char send_data [1024] , recv_data[1024];       
  struct sockaddr_in server_addr,client_addr/*, sysinfo*/; 
  struct sysinfo info;   
  int sin_size;
  
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      perror("Socket");
      exit(1);
  }
  
  if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&amp;true,sizeof(int)) == -1) {
      perror("Setsockopt");
      exit(1);
  }
  
  server_addr.sin_family = AF_INET;         
  server_addr.sin_port = htons(1237);     
  server_addr.sin_addr.s_addr = INADDR_ANY; 
  bzero(&amp;(server_addr.sin_zero),8); 
  
  if (bind(sock, (struct sockaddr *)&amp;server_addr, sizeof(struct sockaddr))
                                                                 == -1) {
      perror("Unable to bind");
      exit(1);
  }
  
  if (listen(sock, 5) == -1) {
      perror("Listen");
      exit(1);
  }
  
  printf ("\nTCPServer Waiting for client on port 1237");
      fflush(stdout);
  while(1)
  {  
  
      sin_size = sizeof(struct sockaddr_in);
  
      connected = accept(sock, (struct sockaddr *)&amp;client_addr,&amp;sin_size);
  
      //sysinfo(&amp;connected);
      printf("\n I got a connection from (%s , %d)",
             inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
      send(connected, "Hello this is a simple server", 100, 1);
  
      while (1)
      {
          printf("\n SEND (q or Q to quit) : ");
          fgets(send_data, sizeof(send_data), stdin);
  
          bytes_recieved = recv(connected,recv_data,1024,0);
          recv_data[bytes_recieved] = '\0';
  
          if (strcmp(recv_data , "u") == 0 || strcmp(recv_data , "U") == 0)
              {
              if (sysinfo(&amp;info) == 0) {
                 snprintf(send_data, sizeof send_data, "Uptime: %ld seconds\n", info.uptime);
              } else {
                 snprintf(send_data, sizeof send_data, "Error getting uptime: %s\n", strerror(errno));
              }
              send(connected, send_data,strlen(send_data), 0);  
          }
  
      }       
      close(sock);
      return 0;
  }
  }
  </code></pre>