LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: devel

如何使编译后的程序运行时将源程序原样打印出来

[复制链接]
 楼主| 发表于 2004-3-23 20:22:33 | 显示全部楼层
这个又错在哪里?看不出来?

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <sys/stat.h>
  5. #include <sys/types.h>
  6. #include <string.h>
  7. #include <errno.h>
  8. #include <stdlib.h>
  9. #define MAXLINE 8192
  10. int
  11. main(void)
  12. {
  13.     printf("%s\n",__FILE__);
  14.     FILE *fd ;
  15.     char buf[MAXLINE];
  16.     if((fd=fopen(__FILE__,"r"))==NULL) {
  17.            printf("Unable open file : %s\n",strerror(errno));
  18.            return(1);
  19.     }
  20.     if(fgets(buf,MAXLINE,fd)==NULL) {
  21.            printf("Unable read file : %s\n",strerror(errno));
  22.            return(1);
  23.     }
  24.     fputs(buf,(FILE *)STDOUT_FILENO);
  25.     fclose(fd);
  26.     return(0);
  27. }
  28. # ./a.out
  29. file_myself.c
  30. Segmentation fault

复制代码

:rolleyes:fputs()哪里?
发表于 2004-3-23 20:44:06 | 显示全部楼层
fputs(buf,(FILE *)STDOUT_FILENO);
应该是
fputs(buf, stdout);
发表于 2004-3-23 21:25:48 | 显示全部楼层
fputs好象只能带一个参数吧,应该是fput(buf,stdout)吧
 楼主| 发表于 2004-3-23 21:27:24 | 显示全部楼层
谢谢libinary!!一直没有注意stdout,stdint,stderr的数据类型是FILE *
把(FILE *)STDOUT_FILENO change to stdout ,上面的程序只能打印出源文件的第一行。
符合要求的程序是这样:

  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <sys/stat.h>
  5. #include <sys/types.h>
  6. #include <string.h>
  7. #include <errno.h>
  8. #include <stdlib.h>
  9. #define MAXLINE 8192
  10. int
  11. main(void)
  12. {
  13.     printf("%s\n",__FILE__);
  14.     FILE *fd ;
  15.     char buf[MAXLINE];
  16.     if((fd=fopen(__FILE__,"r"))==NULL) {
  17.            printf("Unable open file : %s\n",strerror(errno));
  18.            return(1);
  19.     }
  20.     while(fgets(buf,MAXLINE,fd) != NULL )
  21.            fputs(buf,stdout);
  22.     fclose(fd);
  23.     return(0);
  24. }
复制代码
 楼主| 发表于 2004-3-23 21:30:30 | 显示全部楼层
最初由 wuhu 发表
fputs好象只能带一个参数吧,应该是fput(buf,stdout)吧

fputs()是两个参数,
int fputs( const char* buf,FILE* fp )
好象没有fput() 的哟??
发表于 2004-3-25 11:42:48 | 显示全部楼层
呵呵,错了,是puts(),
int puts(const char *s);
int putchar(int c);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表