Como armazenar o sistema ("date +% s") para a variável? c ++ [closed]

1

Aqui está o meu problema, quando tento fazer

long int second;
second=system("date +%s);

e, em seguida, exportar o "segundo" para um arquivo de texto eu recebo 0 em vez de 1403109...

Como posso exportar a saída deste comando para um texto sempre que o segundo mudar?

    
por mrapsogos 18.06.2014 / 18:38

3 respostas

1

A saída de system("date +%s") não pode ser armazenada em uma variável como você tentou.

De man system

int system(const char *command);
  

system executa um comando especificado no comando chamando /bin/sh -c command e retorna após o comando ter sido concluído.

system não retorna a saída do comando executado. Ele retorna 0 se o comando for executado com sucesso e o shell não estiver disponível. Caso contrário, retorna algum status de saída inteiro.

  

Como posso exportar a saída desse comando para um arquivo de texto

Método 1: Redirecionamento (já mencionado por @Jobin): sistema de chamadas como,

system("date +\%s >> text.txt");

Método 2: Use popen , ele retornará um FILE* que você pode usar para ler a saída do comando.

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

int main()
{
  FILE *fp,*outputfile;
  char var[40];

  fp = popen("date +%s", "r");
  while (fgets(var, sizeof(var), fp) != NULL) 
    {
      printf("%s", var);
    }
  pclose(fp);

  outputfile = fopen("text.txt", "a");
  fprintf(outputfile,"%s\n",var);
  fclose(outputfile);

  return 0;
}
    
por souravc 18.06.2014 / 20:23
0

Para obter tempo, você pode usar funções no time.h A função do sistema retorna apenas o código de retorno, em vez da saída.

#include <iostream>
#include <stdio.h>

int main()
{
    FILE* outputfile = popen(REPLACE_WITH_COMMAND, "r");
    // Now, in the variable outputfile, is output as pointer
    //   to FILE object. Operate with this as file
    return 0;
}
    
por user294348 18.06.2014 / 18:44
0

Você poderia redirecionar diretamente a saída para um arquivo usando o operador de redirecionamento > da seguinte forma:

system("date +\%s > filename");

Lembre-se de que você precisa escapar do % e substituir filename pelo arquivo para o qual deseja que a saída seja redirecionada.

O operador > redireciona a saída do comando para o lado esquerdo para o arquivo no lado direito, sobrescrevendo o conteúdo de filename (se houver) com a saída, em vez de imprimi-lo na saída padrão . Se você quiser anexar a saída em vez de sobrescrever o conteúdo anterior, você pode usar >> em vez de > .

    
por jobin 18.06.2014 / 18:54