正常的I/O缓冲区大小(一般是512或1024)
getc(fp) 从流fp中返回一个字符
getchar() getc(stdin)
putc(c,fp) 向流fp输出一个字符c
putchar(c) putc(c,stdout)
feof(fp) 当文件结束时得到一个不为0的数
ferror(fp) 当文件出错时得到一个不为0的数
fileno(fp) 流fp的文件描述符
表 5 常用的标准 I/O 函数
名称 含义
fp=fopen(s,mode) 打开文件,mode为r、w、a时分别表示读、写、添加
c=getc(fp) 得到一个字符。即getc(stdin)
putc(c,fp) 放入一个字符。即putc(c,stdout)
ungetc(c,fp) 将字符放回输入文件fp,每次至多放回一个字符
scanf(format,a1,...) 把字符从stdin读入到a1,...。ai必须是指针
fscanf(fp,...) 从文件fp中读入
sscanf(s,...) 从字符串s中读入
printf(format,a1,...) 对a1,...进行格式化,输出到stdout
fprintf(fp,...) 输出到文件fp
sprintf(s,...) 输出到字符串s
fgets(s,n,fp) 从文件fp中至多读n个字符到s中
fputs(s,fp) 在文件fp中输出字符串s
fflush(fp) 将缓冲区中的数据写到fp中
fclose(fp) 关闭文件fp
fp=popen(s,mode) 为命令s打开一个管道
pclose(fp) 关闭管道fp
system(s) 运行命令s,等待其结束
2.2.2 IEEE POSIX
POSIX 是一系列由 IEEE(Institute of Electrical and Electronics Engineers,电气与电子一程师协会) 制定的标准。POSIX 指的是可移植的操作系统接口(Portable Operating System Interface)。它原来指的 只是 IEEE 标准 1003.1-1988(操作系统接口),后来则扩展成包括很多标记为 1003.1 的标准及标准草案。 虽然 1003.1 标准是以 UNIX 操作系统为基础的,但是它并不限于 UNIX 和类似于 UNIX 的系统。 IEEE 1003.1 工作组继续对标准做出修改,在后续的版本中逐渐加入多线程编程接口(称为 pthreads,指的就是 POSIX 线程)、 实时接口以及事件跟踪方面的扩展。
表6 POSIX 标准定义的必需头文件
头文件 说明 头文件 说明
< dirent.h > 目录项 < fcntl.h > 文件控制
< fnamtch.h > 文件名匹配类型 < glob.h > 路径名模式匹配类型
< grp.h > 组文件 < netdb.h > 网络数据库操作
... ... ... ...
这些库中包含了系统编程用于的各种功能,诸如文件控制、套接字(socket)、消息队列、信号量、共享存储、线程控制等等。
3 文件 I/O
3.1 文件描述符
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个 现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用 open 或 creat 返回的文件描述符标识该文件,将其作为参数传送给 read 或 write。 依照惯例,UNIX 系统 shell 使用文件描述符 0 与进程标准输入相关联,文件描述符 1 与标准输出相关联, 文件描述符 2 与标准出错输出相关联。 在依从 POSIX 的应用程序中,幻数 0、1、2 应当替换成符号常量
STDIN_FILENO、 STDOUT_FILENO、 STDERR_FILENO。这些常量都定义在头文件 < unistd.h > 中。 对于每个文件描述符,通常都定义有 open、creat、close、read 这样的一些系统调用。 对于普通文件的描述符而言,这些接口的功能与 C 库的 fxxxx 系列接口功能相当。 差别在于这里使用的是文件描述符标识每个文件,而不是使用 FILE 指针。 当然,像 open 并不仅仅是针对普通文件的,对于其它的设备文件,在应用层也是可以使用相同的接口进行操作的, 只是在 linux 内核当中,会根据文件的不同类型,选择不同的驱动程序实现用户所需的功能。
4 进程环境
4.1 main 函数
C 程序总是从 main 函数开始执行。main 函数的原型是
int main(int argc, char *argv[]);
其中,argc 是命令行参数的数目,argv 是指向参数的各个指针所构成的数组。 当内核执行 C 程序时(
文章出处:http://www.diybl.com/course/6_system/linux/Linuxjs/20071019/78254_3.html