首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从stdin中打印行?

如何从stdin中打印行?
EN

Stack Overflow用户
提问于 2019-01-20 06:43:31
回答 1查看 219关注 0票数 0

当在命令行上运行时,我将标准输入重定向为通过命令ls -l生成的输出,并且我希望打印出它的结果。

因此,假设在我运行ls -l之后,我得到以下输出:

代码语言:javascript
运行
复制
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 |./测试,并且我已经有效地将标准输入从键盘更改为ls -l命令所产生的输出。现在我想在我的C程序中做的是打印出ls -l命令产生的输出。

我是通过scanf()和while循环来实现的。我遇到的问题是格式化我的文本。第一行“总计519”对我来说有点没用,但它把我弄糊涂了。

代码语言:javascript
运行
复制
#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;  
} 
EN

回答 1

Stack Overflow用户

发布于 2019-01-20 07:12:06

一项建议:

代码语言:javascript
运行
复制
#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;  
} 

执行示例:

代码语言:javascript
运行
复制
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
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54272007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档