способ отправки строк в стандартный вывод и сокет в 1 строку - PullRequest
0 голосов
/ 23 января 2010

Я хочу записать это только в 1 строку:

fprintf(stdout, "RCPT TO: <%s>\r\n", argv[argc-1]);
fprintf(sockfd, "RCPT TO: <%s>\r\n", argv[argc-1]);

поэтому я хочу отправить ту же строку на стандартный вывод и на мой открытый сокет. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 23 января 2010

С

#include <stdarg.h>

int fprintf_both(FILE *a, FILE *b, const char *fmt, ...)
{
  FILE *f[2];
  const int n = sizeof(f) / sizeof(f[0]);
  int i;
  int sum = 0;

  f[0] = a;
  f[1] = b;

  for (i = 0; i < n; i++) {
    va_list ap;
    int bytes;

    va_start(ap, fmt);
    bytes = vfprintf(f[i], fmt, ap);
    va_end(ap);

    if (bytes < 0)
      return bytes;
    else
      sum += bytes;
  }

  return sum;
}

Вы можете

fprintf_both(stdout, sockfd, "RCPT TO: <%s>\r\n", argv[argc-1]);
1 голос
/ 23 января 2010

Нет, если вы не хотите написать свою собственную функцию, которая принимает два File * и varargs и дважды вызывает fprintf.

0 голосов
/ 23 января 2010

Полагаю, вы хотите сделать это, чтобы поместить его во что-то вроде условия while? Вам может понравиться оператор запятой C, например,

while (f1 (), f2 ()) {// bla}

Запятая вызывает выполнение f1 (), возвращаемое значение отбрасывается, затем следует f2 () и сохраняется возвращаемое значение. (то есть f2 () должен возвращать int или bool, а f1 () не имеет значения)

...