1: 系统调用:打开一个文件
函数原型:int open(const char pathname, info flage, /* mdode_t m) 头文件:#include
#include
#include
参数:flag
1> 下面三个常量只能选用一个:
O_RDONLY, O_WRONLY, O_RDWR
2> O_CREAT :如果文件不存在,则创建此文件,选用
个参数时,必须同时指定mode参数
3> O_SYNC :最严格的同步方式,每次write操作在
数据和属性都协议时再返回
2:系统调用:改变文件的所有者
1> 函数原型:int chown(cont char *path, uid_t uid, gid_t gid) ;
int fchown(int fd, uid_t uid, gid_t gid) ;
int lchown(int fd, uid_t uid, gid_t gid) ;
2> 头文件:#include
#include
3> 参数:略
4> 返回值:略
3:系统调用:创建连接
1> 函数原型:int link(const char *existPath, const char *newPath) ;
2> 头文件:#include
3> 参数:existpath :已经存在的文件
newpath :新的文件
4> 返回值:略 4:系统调用:删除一个文件
5> 备注:如果newpath已经存在,则失败
4:系统调用:删除一个文件
1> 函数原型:int unlink(const char *path) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
5> 备注:调用的函数的结果是使得文件的inode-1,如果i_node=0
则自动删除文件数据区
5:标准函数:重命令函数
1> 函数原型:int rename(const char *oldname, const char *newname) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
6:系统调用:读连接文件内容函数
1> 函数原型:int readlink(const char *path, char *buf, int size)
2> 头文件:#include
3> 参数:略
4> 返回值:略
7:系统调用:新建一个目录
1> 函数原型:int mkdir(const char *pathname, mode_t mode) ;
2> 头文件:#include
#include
3> 参数:略
4> 返回值:略
8:系统调用:删除一个空目录
1> 函数原型:int rmdir(const char *pathname) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
9:其他函数:得到文件名最大长度函数
1> 函数原型:int pathconf(const char *relativePath, int parameters) ;
2> 头文件:#include
3> 参数:
reletivePath :相对路径,一般取‘/’
parameters :=_PC_PATH_MAX
4> 返回值:返回本系统支持的最大文件名称长度
10:系统调用:改变当前工作目录函数
1> 函数原型:int chdir(cont char *pathname) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
11:系统调用:得到的当前工作目录函数
1> 函数原型:char* getcwd(char *buf, int size) ;
2> 头文件:#include
3> 参数:
buf :存放路径名的首地址
size :指出存储空间的字节数
4> 返回值:返回当前路径的完整名称
12:系统调用:同步函数(两个)
1> 函数原型:void sync(void) ;
int fsync(int fd) ;
2> 头文件:#include
3> 参数:fd :特定的文件描述符
4> 返回值:fsync函数只有等到真正写到文件中才返回
5> 备注:
1> sync函数只是将修改过的块写入队列
2> fsync对单个文件操作,写完才返回,应用于数据库中
13:特别函数:查询某一个特定用户是否存在
1> 函数原型:passwd* getpwuid(uid_t uid) ;
passwd* getpwnam(const char *name) ;
2> 头文件:#include
#include
3> 参数:略
4> 返回值:返回一个struct passwd指针
5> 备注:可以根据一个用户的uid和name来获得这个用户的信息
14:特别函数:查询所有的用户信息
1> 函数原型:void setpwent() ;
passwd* getpwent() ;
void endpwent() ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
5> 备注:
1> 可以用循环结构来处理
2> 开始前最好先要setpwent(),最后一定要endpwent()
15:特别函数:查看组用户的函数
同上 getgrgid(), getgrnam(), setgrent(), getgrent(), endgrent() ;
16:特别函数:查看主机信息
1> 函数原型:int uname(struct utsname *name) ;
2> 头文件:#include
3> 参数:把获得的东西存入struct utsname中
4> 返回值:略
17:特别函数: 获得主机名称
1> 函数原型:int gethostname(char *buf, int size) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
18:时间函数:得到当前时间
1> 函数原型:time_t time(time_t *buf) ;
2> 头文件: #include
3> 参数:buf :把得到的time_t值存入tm数据结构
4> 返回值:返回日历时间time_t
5> 备注:日历时间是一个秒数
19:特别函数:time_t和tm数据结构之间的转换
1> 函数原型:time_t mktime(tm *buf) ;
struct tm* gmtime(const time_t *ptr) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
20:特别函数:转化可视时间
1> 函数原型:char* asctime(const struct tm *ptr) ;
char* ctime(const time_t *t) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
21:特别函数:退出程序
1> 函数原型:void exit(int status) ;
void _exit(int status) ;
2> 头文件:exit --> #include
_exit --> #include
3> 参数:略
4> 返回值:略
5> 备注:
1> exit :退出时对每个文件流都进行fclose操作
2> _exit:退出,直接进入内核
22:特别函数:注册函数
1> 函数原型:int atexit( void (fun*)(void) ) ;
2> 头文件:#include
3> 参数:void (fun*) (void)
4> 返回值:略
5> 备注:
1> 函数的参数是返回值void,参数void的函数
2> 先注册的后执行,后注册的先执行
23:特别函数:和内存分配相关的四个函数
1> 函数原型:void* malloc(size_t size) ;
void* calloc(size_t nobj, size_t size) ;
void* realloc(void *ptr, size_t newsize) ;
void free(void *ptr) ;
2> 头文件:#include
3> 参数:在realloc中,newsize指的是新的空间的大小
4> 返回值:略
5> 备注:
1> realloc函数中,newsize指的是新的要申请空间的大小
2> calloc和malloc的区别是后者申请完空间后,会初始化
24:特别函数:环境变量的相关操作
1> 函数原型:char* getenv(const char *name) ;
int putenv(const char *str) ;
int setenv(const char *name, const char *value, int rewrite) ;
unsetenv(const char *name) ;
2> 头文件:#include
3> 参数:
1> rewrite != 1,现删除原来的变量
2> rewrite ==1,不删除现存定义
4> 返回值:略
25:特殊函数:保存环境函数
1> 函数原型:int setjmp(jmp_buf buffer) ;
void longjmp(jmp_buf buffer, int flag) ;
2> 头文件:#include
3> 参数:略
4> 返回值:略
5> 备注:
1> 现利用setjmp保存一个状态
2> 利用longjmp恢复保存的状态
1: 系统调用:读一个文件
函数原型:ssize_t read(int fd, void *buf, size_t size) ;
头文件:#include
参数:略
返回值:
1> < 0 :出现I/O错误
2> = 0 :达到文件结尾
3> > 0 :返回读到的实际字节数
备注:略
2:系统调用:写入一个文件
函数原型:ssize_t write(int fd, void *buf, size_t size) ;
头文件:#include
参数:略
返回值:
1> < 0 :出现I/O错误
2> > 0 :返回写入的实际字节数目
----------------------------------
注意:当返回值不等于size时,则出现I/O错误备注:略
3:系统调用:返回本进程的ID
函数原型:pid_t getpid() ;
头文件:#include
参数:无
返回值:
1> > 0 :返回本进程ID
2> < 0 :出现错误
备注:无
4:系统调用:返回本进程的组ID
函数原型:gid_t getgid() ;
头文件:#include
参数:无
返回值:
1> < 0 :出现错误
2> > 0 :返回组ID
5:系统调用:复制一个文件描述符(一个参数)
函数原型:int dup(int fd) ;
头文件:#include
参数:略
返回值:
1> < 0 :出现错误
2> >= 0 :返回一个文件描述符
备注:此函数的结果就是两个文件符指向一个相同的文件
6:系统调用:复制一个文件描述符(两个参数)
函数原型:int dup(int fd1, int fd2) ;
头文件:#include
参数:
fd1 :已知的fd
fd2 :要复制到的fd
返回值:
1> <0 :出现错误
2> >=0 :调用成功
备注:
此函数的分成三种情况:
1>若fd2已经打开,且fd2 != fd1,则先将fd2关闭
2>若fd2已经打开,且fd2 == fd1,则直接返回
3>若fd2没有打开,则直接复制
7:系统调用:获取文件属性的三个函数
函数原型:int stat(const char *pathname, stat *buf) ;
int fstat(int fd, stat *buf) ;
int lstat(int fd, stat *buf) ;
头文件:#include
#include
参数:略
返回值:
如果返回负数,则调用失败
备注:
当操作的文件是一个链接文件时
1>stat和fstat返回的是链接指向文件的属性
2>lstat返回的是链接文件本身的属性
8:系统调用:判断文件类型的几个宏(Question:参数)
头文件:(Question)
普通文件:S_ISREG()
目录文件:S_ISDIR()
链接文件:S_ISLNK()
块设备:S_ISBLK()
字符设备:S_ISCHR()
管道:S_ISFIFO()
SOCKET :S_ISSOCK()
9:系统调用:测试文件存取模式
函数原型:int access(const char *pathname, int mode)
头文件:#include
#include
#include
参数:
mode的取值情况:
---------------
1> 存在:F_OK (文件是否存在)
2> 可读:R_OK
3> 可写:W_OK
4> 执行:X_OK
返回值:
如果失败,返回一个负数
备注:
10:系统命令:置位设置-用户-ID位
chmod u+s file
11:系统结构:文件存储权限字
S_ISUID 设置-用户-ID
S_ISGID 用户-组 -ID
S_ISIVX 粘住位
S_IRUSR 用户相关
S_IWUSR
S_IXUSR
S_IRGRP 组相关
S_IWGRP
S_IXGRP
S_IROTH 其他用户相关
S_IWOTH
S_IXOTH
12:系统函数:屏蔽标记函数
函数原型:mode_t umask(mode_t masks) ;
头文件:#include
参数:要屏蔽的存储方式字(mode_t)
返回值:返回原来的屏蔽方式字
备注:
1>此函数如果出错,则不会返回
2>这是UNIX中出错不会返回的仅有的几个函数之一13:系统调用:改变文件存取模式
函数原型:int chmod(const char *pathname, mode_t mode) ;
int fchmode(int fd, mode_t mode) ;
头文件:#include
#include
参数:略
返回值:如果出错,则返回一个负数
备注:
fchmod可以设置一个已经打开文件的存储访问权限
14:系统调用:截短文件的函数
函数原型:int truncate(const char *pathname, off_t length) ;
int ftruncate(int fd, off_t length) ;
头文件:#include
#include
参数:off_t (截短到该长度)
返回值:如果失败,则返回一个负数
备注:
1>length可正可负
2>可能出现“文件空洞”
15:标准函数:设置流的缓冲类型
函数原型:int setvbuf(FILE *fstream, void *buf, int mode, size_t size 头文件:#include
参数:
buf :if buf==NULL,则由系统来分配缓存,叫做系统缓存
if buf!=NULL,则来使用分配的缓存,叫做用户缓存
size:分配的用户缓存大小
mode:
_IOFBF :I/O全缓存
_IOLBF :I/O行缓存
_IONBF :I/O不缓存
参数:如果失败,则返回一个负数
16:标准函数:缓冲流
函数原型:int fflush(FILE *fstream) ;
头文件:#include
参数:
if fstream == NULL,则强制刷新全部流
if fstream != NULL,则刷新特定流
返回值:如果失败,则返回一个负数
17:标准函数:打开文件的三个函数
函数原型:FILE* fopen(const char *pathname, char *mode) ;
FILE* fropen(const char *pathname, char *mode) ;
FILE* fdopen(int fd, char *mode) ;
头文件: #include
参数:略
返回值:略
备注:
1> fopen :路径 FILE*
2> fropen :重新打开一个文件
3> fdopen :把FILE* 和一个fd联系起来
I/O的几种type类型
1> r :为读而打开
2> r+ :为读和写而打开
3> w :使文件长度称为0,或者为写而创建文件
4> w+ :使文件长度成为0,为读和写而打开
5> a :添加,为在文件尾写而打开或者为了写而创建文件
6> a+ :为在文件尾读和写而打开或创建
19:标准函数:关闭一个文件流
函数原型:int fclose(FILE* fstream) ;
头文件:#include
参数:略
返回值:如果出错,返回一个负数
备注:系统在关闭一个文件时,会自动刷新该文件相关的流
1> 输入数据:全部被抛弃
2> 输出数据:全部被刷新
20:标准函数:读取一个字符(三个)
函数原型:int getchar() ;
int getc(FILE *fstream) ;
int fgetc(FILE *fstream) ;
头文件:#include
参数:略
返回值:
1> EOF :文件结束
2> >=0 :读取的字符的ASCII码
3> <0 :出现错误
备注:
1>getc和fgetc的区别
getc是一个宏
2>返回值一定要用int类型,不是char类型
3>三个函数遇到文件结束或者I/O错误时,都会返回负数,这
个时候应该用两个函数来判断是那种情况:
feof(FILE *fstream) ; // 是否文件结尾?
ferror(FILE *fstream) ; // 是否出现错误?
21:标准函数:测试是否到达一个文件流的结束
函数原型:int feof(FILE *fstream) ;
头文件:#include
参数:略
返回值:略
22:标准函数:测试一个文件流是否出现错误
函数原型:int ferror(FILE *fstream) ;
头文件:#include
参数:略
返回值:略
23:标准函数:字符回送函数
函数原型:int ungetc(int c, FILE *fsteam) ;
头文件:#include
参数:略
返回值:
1>如果回送成功,则返回字符c
2>如果失败,则返回一个负数
24:标准函数:字符输出函数
函数原型:int putchar(int c) ;
int putc(int c, FILE *fstream) ;
int fputc(int c, FILE *fstream) ;
头文件:#include
参数:略
返回值:
如果失败,则返回一个负数
备注:其他相关事项和put类型相同
25:标准函数:每次一行I/O的输入函数
函数原型:int fgets(const char *buf, size_t size, FILE *fstream) ;
头文件:#include
参数:略
返回值:
1>如果成功,返回实际写入的字节数
2>如果返回值和size不相等,则出现错误
26:标准函数:每次一行I/O的输出函数
函数原型:int fputs(const char *buf, FILE *fstream) ;
头文件:#include
参数:略
返回值:
1> >=0 :返回实际读取的字节数
2> <0 :说明达到文件末尾或者出现错误
备注:
1>fgets函数中,如果缓存大小是size,则最多可以存放n-1
个字符(包括‘\n’符号)
2>fputs函数中,系统推荐在buf[size-2]字符=’\n’,但是
并不强制这样做
27:标准函数:读二进制文件或者数据类型
函数原型:int fread(void *buf, size_t objsize, int objnum, FILE *fs 头文件:#include
参数:
buf :缓存首地址
objsize :一个字节所占的字节数目
objnum :对象的数目
返回值:
1> >=0 :返回读到的对象数目
2> <0 :到达文件终止或者出现错误
备注:此函数可对数据操作或者二进制文件进行相关操作
28:标准函数:写二进制文件或者数据类型
函数原型:int fwrite(const void *buf,size_t size, int num, FILE *f) 头文件:#include
参数:
buf :缓存首地址
objsize :一个字节所占的字节数目
num :要写入的字节数目
返回值:如果返回值和num不相等,那么就出现了错误
备注:fread和fwrite函数是有局限性的,因为各种操作系统同一种
类型所占的空间大小也是有区别的
29:标准函数:定位流函数
函数原型:int fseek(FILE *fstream, long offset, int whence) ;
头文件:#include
参数:
offset :偏移量
whence :从什么地方开始(SET,END,CURSOR)
返回值:如果定位失败,则返回一个负数
30:标准函数:重置文件流
函数原型:int rewind(FILE *fstream)
头文件:#include
参数:略
返回值:略
31:标准函数:建立临时文件(两个)
函数原型:char* tmpnam(char *str) ;
FILE* tmpfile(void) ;
头文件:#include
参数:
if (str == NULL)
路径名会存储在str中
if (str != NULL)
路径名存储在系统的静态空间里面
返回值:
tmpnam :返回临时文件的路径名
tmpfile :返回临时文件的指针
-------------- From : Advanced Programming In UNIX Environment (1-5)----- ------