Как распечатать строки из стандартного ввода? - PullRequest
0 голосов
/ 20 января 2019

Я перенаправляю вывод stdin из команды ls -l при запуске в командной строке и хочу распечатать ее результаты.

Так что после запуска ls -l я получаюследующий вывод:

total 519
-rw-------  1 jeff  dev    1274 22 Jun 14:52 prinprog
-rwx---xr--  1 jeff  dev   2410  6 Apr 12:10 temp.txt
-rwxr----x  1 jeff  dev    8128  1 Feb  2013 yyz
-rw-r--r--  1 jeff  dev      98 15 Feb  2013 yyz.c

Теперь после компиляции моей программы на C я делаю ls -l |./testing и я фактически изменили стандартный ввод с клавиатуры на тот, который когда-либо выводил команда ls -l.Теперь, что я хочу сделать в моей программе на C, это распечатать вывод, полученный командой ls -l.

Я делаю это с помощью scanf () и цикла while.У меня проблемы с форматированием текста.Эта первая строка «всего 519» для меня отчасти бесполезна, но она отбрасывает меня.

#include <stdio.h>

int main() {

char permissions[10];
int num;
char user[20];
char random[20];
int fileSize;

while(scanf("%s %d %s %s %d", permissions, &num, user, random, &fileSize) != EOF) {
    printf("%s %d %s %s %d\n", permissions, num, user, random, fileSize);
}

return 0;  
} 

1 Ответ

0 голосов
/ 20 января 2019

Предложение:

#include <stdio.h>

int main() {
  static char line[256];

  while (fgets(line, sizeof(line), stdin) != NULL) {
    char perms[11];
    int nlinks;
    char user[20];
    char grp[20];
    int size;
    char month[10];
    int day;
    char time[10];
    char name[256];

   if (sscanf(line, "%10s %d %19s %19s %d %9s %d %9s %255s",
               perms, &nlinks, user, grp, &size, month, &day, time, name) == 9)
       printf("perms=%s nlinks=%d user=%s grp=%s size=%d month=%s date=%d time/year=%s name=%s\n",
         perms, nlinks, user, grp, size, month, day, time, name);
  }

  return 0;  
} 

Пример выполнения:

ls -l /usr/sbin | ./a.out
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=9788 month=déc. date=13 time/year=2016 name=accessdb
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=3078 month=oct. date=5 time/year=22:43 name=addgnupghome
perms=lrwxrwxrwx nlinks=1 user=root grp=root size=7 month=juin date=27 time/year=2016 name=addgroup
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=860 month=avril date=2 time/year=2017 name=add-shell
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=34509 month=juin date=27 time/year=2016 name=adduser
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=4136 month=janv. date=23 time/year=2017 name=alsabat-test
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=83912 month=janv. date=23 time/year=2017 name=alsactl
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=27872 month=janv. date=23 time/year=2017 name=alsa-info
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=2219 month=oct. date=5 time/year=22:43 name=applygnupgdefaults
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=44224 month=déc. date=26 time/year=2016 name=arp
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=42920 month=nov. date=24 time/year=2017 name=arpd
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=13542 month=oct. date=10 time/year=2016 name=aspell-autobuildhash
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=17884 month=déc. date=8 time/year=2016 name=atd
perms=-rwxr-xr-x nlinks=1 user=root grp=root size=105136 month=janv. date=23 time/year=2017 name=avahi-daemon
...
...