码迷,mamicode.com
首页 > 其他好文 > 详细

Unix环境高级编程学习笔记(三):标准I/O , 系统数据文件和信息

时间:2015-03-21 16:55:01      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

标准I/O函数不同于readwrite函数,是其在流上进行操作,

当首次调用标准I/O函数时,系统会首先调用malloc,为流创造缓冲区,

 

2 fopen函数

#include<stdio.h>

file * fopen(const char* pathname, const char * restrict name);

 

 

 

打开返回指针,出错返回NULL

type的取指有r(读),w(写),a(追加),r+/w+(读+写),a+(读++追加)

 

int fclose(file* fp)

 

成功返回0,失败返回EOF

 

一旦打开流,系统支持三种不同I/O方式,

1每次一个字符

每次一行(fgetsfputs

直接I/O,读取某种数量的数据,也称面向结构I/Ofreadfwrite

 

1每次一个字符,输入函数

int getc(file * fp)

int fgetc(file *fp)

int getchar(void)

 

成功返回下一个字符,失败返回EOF

 

getchar()等价于getcstdin),getcfgetc的区别是getc可能被实现为宏,而fgetc一定是一个函数

EOF被定义为负值,通常为-1

 

为区分上面函数返回值究竟是错误还是EOF,我们定义这两个函数

int ferror(file* fp);

int feof(file * fp);

 

 

可以将数据输入回流中

ungetc(int c, file* fp)

 

成功返回c,失败返回EOF

 

输出函数,对应于每一个上面的输入函数

int putc(file* fp)

int fputc(file* fp)

int putchar(void)

 

每次一行

char* fgets(char * buf ,int n ,fille* fp)

char * gets(char*buf)

 

成功返回buf,失败返回NULL

gets直接从stdin读输入,但是非常不推荐这个函数,因为没有指定缓冲区大小,容易造成缓冲区溢出

 

同样对应着输出函数

int fputs(char* buf, int n, file* fp)

int gets(char*buf)

 

同样不推荐gets

 

面向结构输入输出

size_t fread(void * ptr, size_t size, size_t nobj, file* fp)

size_t fwrite(void *ptr , size_t size, size_t nobj, file* fp)

 

ptrbufsize是单个结构体的大小,nobj是要读写对象个数

 

4 ftellfseek函数

long ftell(file* fp)

int fseek(file* fp,long offset ,int whence)

 

ftell是以字节为度量,返回距文件开头的距离,fseek中的offset也是以字节为度量的偏移

 

这里每一个关于流的I/O函数其实最终都是调用关于文件描述符的I/O完成的

int fileno(file* fp)

 

将流转换为文件描述符

 

系统数据文件和信息:

 

6 /etc/passwd中字段,以及字段含义

root   :x     :0       :0    :root  :/root      :/bin/bash

用户名:密码:用户id:组id:注释:工作目录:启动shell

 

7 getpwuid函数,getpwgid函数,通过uidgid读取口令文件

 

#include<pwd.h>

struct passwd* getpwuid(uid_t uid)

struct passwd* getpwnam(const char* name)

 

 

 

Unix环境高级编程学习笔记(三):标准I/O , 系统数据文件和信息

标签:

原文地址:http://www.cnblogs.com/zhangfann/p/4355651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!