在貼代碼之前,有一些東西是需要講清楚的。
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;
}