我可以让它镜像线。我试图用printf打印这行,因为它被缓冲而无效,只在我 Ctrl + D 时打印。
我正在尝试write()
,但没有显示输出。为什么不?我必须使用系统调用。如果在行打印后这是一件简单的事情,我怎么能在数字后添加一个空格?
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
int n, i = 0;
char buf[1];
int reader=0;
if(argc > 1){
reader = open(argv[2],O_RDONLY);
}
while(n = read(reader,buf,sizeof(buf)) > 0) {
if (buf[0] == '\n') {
i++;
write(1, &i,sizeof(i));
}
write(1,buf,sizeof(buf));
}
close(reader);
return 1;
}
答案 0 :(得分:1)
这是一个正常运行的程序版本
请注意&#39;行号的正确时间。在一行的开头,包括第一行,在最后一行之后没有额外的行号输出
请注意使用高级I / O而不是低级read()
和write()
请注意检查缺少的命令行参数
当命令行参数缺失时,请注意stderr的用法语句
当fopen()
失败时,请注意错误检查和正确的错误消息
请注意,每个缩进级别是一致的,宽度为4个空格
注意使用变量&#39; priorCh&#39;跟踪何时需要输出行号。
请注意正确引用main()
参数argc
和argv[]
#include <stdio.h> // printf(), fopen(), fclose(), fgetc(), putc(), perror()
#include <stdlib.h> // exit(), EXIT_FAILURE
int main(int argc, char *argv[])
{
int i = 0; // line counter
int ch;
int priorCh = '\0';
FILE* reader= NULL; // init to an invalid value
if( 1 == argc )
{
fprintf( stderr, "USAGE: %s <inputFileName> \n", argv[0] );
exit( EXIT_FAILURE );
}
// implied else, correct number of command line parameters
reader = fopen(argv[1], "r");
if( NULL == reader )
{
perror( "fopen for input file failed" );
exit( EXIT_FAILURE );
}
// implied else, open successful
i++;
printf( "%d ", i );
while( (ch = fgetc( reader ) ) != EOF )
{
if( '\n' == priorCh )
{
i++;
printf( "%d ", i );
}
putc( ch, stdout );
priorCh = ch;
} // end while
fclose(reader);
return 1;
} // end function: main
使用上述文件作为输入
时,输出如下1 #include <stdio.h> // printf(), fopen(), fclose(), fgetc(), putc(), perror()
2 #include <stdlib.h> // exit(), EXIT_FAILURE
3
4
5
6
7
8 int main(int argc, char *argv[])
9 {
10
11 int i = 0; // line counter
12 int ch;
13 int priorCh = '\0';
14
15 FILE* reader= NULL; // init to an invalid value
16
17 if( 1 == argc )
18 {
19 fprintf( stderr, "USAGE: %s <inputFileName> \n", argv[0] );
20 exit( EXIT_FAILURE );
21 }
22
23 // implied else, correct number of command line parameters
24
25
26 reader = fopen(argv[1], "r");
27 if( NULL == reader )
28 {
29 perror( "fopen for input file failed" );
30 exit( EXIT_FAILURE );
31 }
32
33 // implied else, open successful
34
35 i++;
36 printf( "%d ", i );
37
38 while( (ch = fgetc( reader ) ) != EOF )
39 {
40 if( '\n' == priorCh )
41 {
42 i++;
43 printf( "%d ", i );
44 }
45 putc( ch, stdout );
46 priorCh = ch;
47 } // end while
48
49 fclose(reader);
50 return 1;
51 } // end function: main