Linux C编程的一个小例子——实现一个简单的who命令(第一版)
2013-12-31 11:50
211 查看
在贴代码之前,有一些东西是需要讲清楚的。
1)Linux C编程用到了一些只有Linux下才有的函数。而将这些放到Windows下的话,会报错。
也就是说,讲一下代码在windows下运行是会报错的。。。
2)有人会有疑问。书本上的是,先使用VI编辑who.c文件,然后再命令行的状态下使用GCC命令,生成一个.o文件,
然后在运行该文件。假如使用eclipse在Linux进行C编码,那么是不是现在eclipse写好who.c文件,然后再命令行模式下
进入到eclipse的工作目录,然后在使用GCC命令生成一个.o文件,然后再运行该文件。那么使用eclipse进行Linux C开发,不就仅仅是使用eclipse的编辑功能来代替VI而已嘛,其他的都一样嘛,然而eclipse下Linux C开发会更麻烦。。。
其实,不是这样的。使用eclipse进行 Linux C开发,写完who.c文件以后,你只需要在eclipse下单击Build Configure
然后,就直接运行,这时,在eclipse的控制台下输出的结果与你在命令中输出的结果是一样的。。。
In a word,也就是说,在命令行模式下,你需要进行以下几步:使用VI编辑who.c文件-----》使用gcc 命令shengcheng .o文件----》运行该文件
而在eclipse下,这个流程就可以变成:在eclipse中编写who.c代码-------》编译(Build Configure)----》运行(在控制台中输出结果)
很显然,在eclipse进行 Linux C开发的优势有以下几点:
1)eclipse所提供的强大的书写功能。其中最实用的就是基本的语法检查功能
2)程序员不需要在使用命令去生成.o文件
3)在控制台中输出的结果更让人一目了然...
----------------------------------------------------------------------------------------
好,说了那么多,以下就在贴上在Linux C下自己实现一个who命令的代码
/*
* who1.c
*
* Created on: Dec 30, 2013
* Author: fedora
*/
#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#define SHOWHOST
void show_info(struct utmp* utbufp){
printf("%-8.8s",utbufp->ut_name);
printf(" ");
printf("%-8.8s",utbufp->ut_line);
printf(" ");
printf("%10ld",utbufp->ut_time);
printf(" ");
#ifdef SHOWHOST
printf("( %s )",utbufp->ut_host);
#endif
printf("\n");
}
int main(){
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
if((utmpfd = open(UTMP_FILE,O_RDONLY)) == -1){
perror(UTMP_FILE);
return 1;
}
while( read(utmpfd,¤t_record,reclen) == reclen ){
show_info(¤t_record);
}
close(utmpfd);
return 0;
}
1)Linux C编程用到了一些只有Linux下才有的函数。而将这些放到Windows下的话,会报错。
也就是说,讲一下代码在windows下运行是会报错的。。。
2)有人会有疑问。书本上的是,先使用VI编辑who.c文件,然后再命令行的状态下使用GCC命令,生成一个.o文件,
然后在运行该文件。假如使用eclipse在Linux进行C编码,那么是不是现在eclipse写好who.c文件,然后再命令行模式下
进入到eclipse的工作目录,然后在使用GCC命令生成一个.o文件,然后再运行该文件。那么使用eclipse进行Linux C开发,不就仅仅是使用eclipse的编辑功能来代替VI而已嘛,其他的都一样嘛,然而eclipse下Linux C开发会更麻烦。。。
其实,不是这样的。使用eclipse进行 Linux C开发,写完who.c文件以后,你只需要在eclipse下单击Build Configure
然后,就直接运行,这时,在eclipse的控制台下输出的结果与你在命令中输出的结果是一样的。。。
In a word,也就是说,在命令行模式下,你需要进行以下几步:使用VI编辑who.c文件-----》使用gcc 命令shengcheng .o文件----》运行该文件
而在eclipse下,这个流程就可以变成:在eclipse中编写who.c代码-------》编译(Build Configure)----》运行(在控制台中输出结果)
很显然,在eclipse进行 Linux C开发的优势有以下几点:
1)eclipse所提供的强大的书写功能。其中最实用的就是基本的语法检查功能
2)程序员不需要在使用命令去生成.o文件
3)在控制台中输出的结果更让人一目了然...
----------------------------------------------------------------------------------------
好,说了那么多,以下就在贴上在Linux C下自己实现一个who命令的代码
/*
* who1.c
*
* Created on: Dec 30, 2013
* Author: fedora
*/
#include <stdio.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#define SHOWHOST
void show_info(struct utmp* utbufp){
printf("%-8.8s",utbufp->ut_name);
printf(" ");
printf("%-8.8s",utbufp->ut_line);
printf(" ");
printf("%10ld",utbufp->ut_time);
printf(" ");
#ifdef SHOWHOST
printf("( %s )",utbufp->ut_host);
#endif
printf("\n");
}
int main(){
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
if((utmpfd = open(UTMP_FILE,O_RDONLY)) == -1){
perror(UTMP_FILE);
return 1;
}
while( read(utmpfd,¤t_record,reclen) == reclen ){
show_info(¤t_record);
}
close(utmpfd);
return 0;
}
相关文章推荐
- Linux C编程的小例子——实现who命令(第二版)
- 一个yale-cas实现单点登录的简单例子实现
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- webservice xfire实现的一个超简单的例子
- 写了一个内核模块 实现简单的类似ps命令
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- 拦截器概述及其简单实现的一个例子
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- C++多态是如何实现的——一个简单明晰的例子告诉你!
- 实现一个简单的cp命令
- Appium+Robotframework实现Android应用的自动化测试-6:一个简单的例子
- 一个简单的例子:javascript实现日期的比较(3)
- 转:一个简单的jQuery插件ajaxfileupload实现ajax上传文件例子
- Tensorflow 实现迁移学习的一个简单例子
- 一个简单的WebService实现例子,SOAP安全验证
- 实现一个简单的工作流例子全过程
- JBPM学习(一):实现一个简单的工作流例子全过程
- Appium+Robotframework实现iOS应用的自动化测试-5:一个简单的例子
- golang信号处理及一个简单例子实现