我正在将标准输入重定向到在命令行上运行时从命令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循环来做到这一点。我遇到的麻烦是格式化文本。第一行“ total 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;
}
答案 0 :(得分:1)
提案:
#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
...