免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 操作系统 BSD utmp的
最近访问板块 发新帖
查看: 2779 | 回复: 5
打印 上一主题 下一主题

utmp的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-24 20:08 |只看该作者 |倒序浏览
1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<utmp.h>
  4 #include<fcntl.h>
  5 #include<sys/uio.h>
  6 #include<unistd.h>
  7
  8 int main()
  9 {
10         struct  utmp current_record;
11         int utmpfd;
12         int reclen=sizeof(current_record);
13
14         if ((utmpfd=open(_PATH_UTMP,O_RDONLY))==-1){
15                 printf("can not open /var/run/utmp\n";
16                 exit(1);
17         }
18
19         if(read(utmpfd,&current_record,reclen)==reclen)
20         printf("%s\n",current_record.ut_line);
21
22         close(utmpfd);
23         return 0;
24
25 }
这样得到的a.out 为什么没有输出呢?(似乎就输出一个\n)
如果读lastlog却可以

论坛徽章:
0
2 [报告]
发表于 2007-01-30 15:12 |只看该作者
你应该使用fread以二进制的方式读取utmp。
也就是用fread替换read
   
  1. if(read(utmpfd,&current_record,reclen)==reclen)         
  2.         printf("%s\n",current_record.ut_line);printf("%s\n",current_record.ut_line);
复制代码


  1. if (fread(&current_record, sizeof(current_record), 1, utmpfd) ==1)
  2.         printf("%s\n",current_record.ut_line);
复制代码

[ 本帖最后由 Goodfriend 于 2007-1-30 18:51 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-03-02 22:45 |只看该作者
原帖由 Goodfriend 于 2007-1-30 15:12 发表
你应该使用fread以二进制的方式读取utmp。
也就是用fread替换read
   
[code] if(read(utmpfd,&current_record,reclen)==reclen)         
        printf("%s\n",current_record.ut_line);pr ...

谢谢楼上的
放假刚回学校 试了下
你那样不行的
不是读写的问题
而且open()返回的file descriptor 不能作为fread的参数

原来那样就好了 只是打出一条空白记录
循环一下就可以
20          while (read(utmpfd,&current_record,reclen)==reclen)
21                 printf("% s",current_record.ut_name);


[ 本帖最后由 坏坏小少 于 2007-3-2 23:09 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-03-02 23:51 |只看该作者

回复 3楼 坏坏小少 的帖子

--

你写到调用 open() 的时候没忘记加上一对括号,结果 read() 的时候就忘了。问题不在于是该用标准 I/O 还是用 UNIX 系统接口。

--

论坛徽章:
0
5 [报告]
发表于 2007-03-03 08:59 |只看该作者
原帖由 langue 于 2007-3-2 23:51 发表
--

你写到调用 open() 的时候没忘记加上一对括号,结果 read() 的时候就忘了。问题不在于是该用标准 I/O 还是用 UNIX 系统接口。

--


有吗??在哪里的??

论坛徽章:
0
6 [报告]
发表于 2007-03-03 11:49 |只看该作者
原帖由 坏坏小少 于 2007-3-3 08:59 发表


有吗??在哪里的??


Sorry,昨天有点晕,其实不是这个问题

19         if(read(utmpfd,&current_record,reclen)==reclen)

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP