%f 为什么不起作用?(模块编程)

发布于 2022-10-02 04:01:53 字数 2954 浏览 10 评论 0

  1. #ifndef __KERNEL__
  2. #  define __KERNEL__
  3. #endif
  4. #ifndef MODULE
  5. #  define MODULE
  6. #endif
  7. #include <linux/config.h>;
  8. #include <linux/module.h>;
  9. #include <linux/kernel.h>;   /* printk() */
  10. #include <linux/malloc.h>;   /* kmalloc() */
  11. #include <linux/fs.h>;       /* everything... */
  12. #include <linux/errno.h>;    /* error codes */
  13. #include <linux/types.h>;    /* size_t */
  14. #include <linux/proc_fs.h>;
  15. #include <linux/time.h>;
  16. #include <linux/init.h>;
  17. int time_read_proc(char *buf, char **start, off_t offset,
  18.                    int count, int *eof, void *data)
  19. {
  20.         int len=0;
  21.         double timee;
  22.         struct timeval tv;
  23.         do_gettimeofday(&tv);
  24.         timee = (tv.tv_sec * 1000000 + tv.tv_usec) /1000000;
  25.         len = sprintf(buf, "%f\n", timee);
  26. //为什么用 %f 输出结果为 %f 而不能得到值,用 %i 或 %lu 都能得到值
  27. //        len += sprintf(buf+len, "%i\n", len);
  28.         *eof = 1;
  29.         return len;
  30. }
  31. static void scull_create_proc()
  32. {
  33.     create_proc_read_entry("proctime", 0 /* default mode */,
  34.                            NULL /* parent dir */, time_read_proc,
  35.                            NULL /* client data */);
  36. }
  37. static void scull_remove_proc()
  38. {
  39.     /* no problem if it was not registered */
  40.     remove_proc_entry("proctime", NULL /* parent dir */);
  41. }
  42. void scull_cleanup_module(void)
  43. {
  44.         scull_remove_proc();
  45. }
  46. int scull_init_module(void)
  47. {
  48.         scull_create_proc();
  49.         return 0;
  50. }
  51. module_init(scull_init_module);
  52. module_exit(scull_cleanup_module);

复制代码

模块程序如上,然后在shell 下执行:
gcc -Wall -c proctime.c -o ptime.o
insmod ptime.o
cat /proc/proctime

输出为 %f
为什么会这样?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2022-10-09 04:01:53

你把timee = (tv.tv_sec * 1000000 + tv.tv_usec) /1000000; 改为timee = (tv.tv_sec * 1000000 + tv.tv_usec) /1000000.0; 试试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文