在C语言中对utmp文件进行查找和写入操作的函数小结

C语言pututline()函数:将utmp记录写入文件
头文件:

#include <utmp.h>

定义函数:

void pututline(struct utmp *ut);

函数说明:pututline()用来将参数ut 的utmp 结构记录到utmp 文件中. 此函数会先用getutid()来取得正确的写入位置, 如果没有找到相符的记录则会加入到utmp 文件尾.
附加说明:需要有写入/var/run/utmp 的权限

范例

#include <utmp.h>
main()
{
  struct utmp ut;
  ut.ut_type = USER_PROCESS;
  ut.ut_pid = getpid();
  strcpy(ut.ut_user, "kids");
  strcpy(ut.ut_line, "pts/1");
  strcpy(ut.ut_host, "www.gnu.org");
  pututline(&ut);
}

执行:

//执行范例后用指令who -l 观察
root pts/0 dec9 19:20
kids pts/1 dec12 10:31(www.gnu.org)
root pts/2 dec12 13:33

C语言getutline()函数:文件查找函数(从utmp文件中查找特定的)
头文件:

#include <utmp.h>

定义函数:

struct utmp * getutline(struct utmp *ut);

函数说明:getutline()用来从目前utmp 文件的读写位置逐一往后搜索ut_type 为USER_PROCESS 或LOGIN_PROCESS 的记录, 而且ut_line 和ut->ut_line 相符. 找到相符的记录便将该数据以utmp 结构返回。

返回值:返回 utmp 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.

范例

#include <utmp.h>
main()
{
  struct utmp ut, *u;
  strcpy(ut.ut_line, "pts/1");
  while((u = getutline(&ut)))
  {
    printf("%d %s %s %s \n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
  }
}

执行:

7 root pts/1

C语言getutid()函数:从utmp文件中查找特定的记录
头文件:

#include <utmp.h>

定义函数:

strcut utmp *getutid(strcut utmp *ut);

函数说明:
getutid()用来从目前utmp 文件的读写位置逐一往后搜索参数ut 指定的记录。
1、如果ut->ut_type 为RUN_LVL, BOOT_TIME, NEW_TIME, OLD_TIME 其中之一则查找与ut->ut_type 相符的记录;
2、若ut->ut_type为INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS 或DEAD_PROCESS 其中之一, 则查找与ut->ut_id相符的记录. 找到相符的记录便将该数据以utmp 结构返回.

返回值:返回 utmp 结构数据, 如果返回NULL 则表示已无数据, 或有错误发生.

范例

#include <utmp.h>
main()
{
  struct utmp ut, *u;
  ut.ut_type=RUN_LVL;
  while((u = getutid(&ut)))
  {
    printf("%d %s %s %s\n", u->ut_type, u->ut_user, u->ut_line, u->ut_host);
  }
}

执行:

1 runlevel -
(0)

相关推荐

  • 简单对比C语言中的fputs()函数和fputc()函数

    C语言fputc()函数:写文件函数(将一指定字符写入文件流中) 头文件: #include <stdio.h> 定义函数: int fputc(int c, FILE * stream); 函数说明:fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中. 返回值:fputc()会返回写入成功的字符, 即参数c. 若返回EOF 则代表写入失败. 范例 #include <stdio.h> main() { FILE * fp; char a[

  • C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数:改变或增加环境变量 头文件: #include4<stdlib.h> 定义函数: int putenv(const char * string); 函数说明:putenv()用来改变或增加环境变量的内容. 参数string 的格式为name=value, 如果该环境变量原先存在, 则变量内容会依参数string 改变, 否则此参数内容会成为新的环境变量. 返回值:执行成功则返回0, 有错误发生则返回-1. 错误代码:ENOMEM 内存不足, 无法配置新的环境变量空间

  • C语言对组文件处理的相关函数小结

    C语言getgrent()函数:从组文件中取得账号的数据 头文件: #include <grp.h> #include <sys/types.h> 定义函数: struct group * getgrent(void); 函数说明:getgrent()用来从组文件(/etc/group)中读取一项组数据, 该数据以group 结构返回. 第一次调用时会取得第一项组数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. struct group { char *

  • 在C语言中对utmp文件进行查找和写入操作的函数小结

    C语言pututline()函数:将utmp记录写入文件 头文件: #include <utmp.h> 定义函数: void pututline(struct utmp *ut); 函数说明:pututline()用来将参数ut 的utmp 结构记录到utmp 文件中. 此函数会先用getutid()来取得正确的写入位置, 如果没有找到相符的记录则会加入到utmp 文件尾. 附加说明:需要有写入/var/run/utmp 的权限 范例 #include <utmp.h> main(

  • Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 with open('pi_digits.txt') as f: # 默认模式为'r',只读模式 contents = f.read() # 读取文件全部内容 print contents # 输出时在最后会多出一行(read()函数到达文件末会返回一个空字符,显示出空字符就是一个空行) print '

  • go语言中json数据的读取和写出操作

    go自带json库,在使用时需要通过 import "encoding/json"来导入该库. 在读取和写入json数据之前需要定义相关的结构体来对应被操作的json数据的格式,并且结构体中需要导出或导入的变量首字母大写. 其中,json.Marshal()用于将一个对象转换为json格式的字节数组,json.Unmarshal()用于将json格式的字节数组转换为一个对象. 具体使用示例如下所示: 首先,定义结构体: type Com struct { Name string Nod

  • asp结合fso实现文件或文件夹创建删除等操作的函数

    '////////////////////////////////////////////////FSO操作///////////////////////////////////// '判断文件夹是否存在 Function FolderExits(Folder) Folder=Server.Mappath(Folder) Set FSO= Server.CreateObject("Scripting.FileSystemObject") IF FSO.FolderExists(Fold

  • Go 语言中 20 个占位符的整理

    目录 一.概念 二.哪些函数支持 三.占位符使用 四.普通占位符 1. %v.%+v.%#v 2. %T 3. %% 五.布尔占位符 六.整数占位符 1. %b 2. %c 3. %d.%5d.%-5d.%05d 4. %o.%#o 5. %q 6. %x.%#x 7. %X.%#X 8. %U.%#U 七.浮点数与复数 1. %b 2. %e.%E 3. %f.%.2f 4. %g.%.3g 八.字符串与字节切片 1. %s 2. %q 3. %x.%X 九.指针 十.其它标记 1. + 2.

  • Android持久化技术之文件的读取与写入实例详解

    本文实例分析了Android持久化技术之文件的读取与写入操作.分享给大家供大家参考,具体如下: 1.文件存储 (1)在Android的持久化技术中,文件存储是最基本的一种数据存储方式. (2)对存储的内容部做任何处理,原样存储到文件中. (3)Context提供了文件写入与读取的方法,openFileOutput:写入到文件:openFileInput:从文件中读取. (4)文件写入时模式有多种:比如是覆盖写入还是追加写入等. (5)写入的文件默认存储在/data/data/报名/files/目

  • C语言中.c和.h文件区别讲解

    C语言中.h和.c文件解析   简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 预处理阶段 词法与语法分析阶段 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为

  • C语言中的getchar和putchar的使用方法

    C语言中的getchar和putchar的使用方法 getchar是以行为单位进行存取的. 当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行.譬如下面程序段: while((c = getchar()) != EOF){ putc

  • C语言中 int main(int argc,char *argv[])的两个参数详解

    C语言中 int main(int argc,char *argv[])的两个参数详解 argc是命令行总的参数个数: argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数.命令行后面跟的用户输入的参数. int main(int argc, char* argv[]) { int i; for (i = 0; i<argc; i++) cout<<argv[i]<<endl; cin>>i; return 0; } 执行时敲入 F:\MYDOCU

  • 详解C语言中rand函数的使用

    前言 我们在编程实现算法的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的rand函数,生成的也是伪随机数. c语言之rand函数的使用 1.写入头文件 #include <stdlib.h> #include <stdio.h> #include <time.h> 2.变量的定义 void main( void ) { int i,k; 3.sran

随机推荐