Chinaunix

标题: utmp的 [打印本页]

作者: 坏坏小少    时间: 2007-01-24 20:08
标题: utmp的
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却可以
作者: Goodfriend    时间: 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 编辑 ]
作者: 坏坏小少    时间: 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 编辑 ]
作者: langue    时间: 2007-03-02 23:51
标题: 回复 3楼 坏坏小少 的帖子
--

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

--
作者: 坏坏小少    时间: 2007-03-03 08:59
原帖由 langue 于 2007-3-2 23:51 发表
--

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

--


有吗??在哪里的??
作者: langue    时间: 2007-03-03 11:49
原帖由 坏坏小少 于 2007-3-3 08:59 发表


有吗??在哪里的??


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

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






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2