为了创建一个新的文件描述符,需要使用系统调用open。
#include <fcnt1.h>
#include <sys/types.h>
#include <sys/stat.h>
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
简单地说,open建立了一条到文件或设备的访问路径。如果调用成功,它将返回一个可以被read,write和其他系统调用使用的文件描述符。准备打开的文件或设备的名字作为参数path传递给函数,oflags参数用于指定打开文件所采取的动作。
open ("myfile", O_CREAT, S_IRUSR|S_IXOTH_);
它的作用是创建一个名为myfile的文件,文件爱你属主拥有读权限,其他用户拥有执行权限。
3.4.4 close系统调用
使用close调用终止文件描述符fildes与其对应文件之间的关联。文件描述符被释放并能够重新使用。close调用成功时返回0,出错时返回-1
#include <unistd.h>
int close(int fildes);
3.4.5 ioctl系统调用
ioctl调用有点像个大杂烩,它提供了一个用于控制设备及其描述符行为和配置底层服务的接口,终端,文件描述符,套接字甚至是磁带机都可以有为它们定义的ioctl。
#include <unistd.h>
int ioctl(int fildes, int cmd,...);
编写一个底层程序copy_system.c,用来逐个字符地把一个文件复制到另外一个文件。
然后再编写一个改进的程序copy_block.c,通过复制大一些的数据块来改善效率。
fcloase函数关闭指定的文件流stream,使所有尚未写出的数据都写出。
#include <stdio.h>
int fclose(FILE *stream);
3.5.5 fflush函数
fflush函数的作用是把文件流里的所有未写出数据立刻写出。
#include <stdio.h>
int fflush(FILE* stream)
3.5.6 fseek函数
fseek函数与lseek系统调用对应的文件流函数。它在文件流里为下一次读写操作指定位置。offset和whence参数的汉所以与lseek系统调用一样。
#include <stdio.h>
int fseek(FILE* stream, long int offset, int whence);
3.5.7 fgetc、getc和getchar函数
fgetc函数从文件流取出下一个字符并把它作为一个字符返回。当它到达文件尾或者出现错误时,它返回EOF。
#include <stdio.h>
int fgetc(FILE* stream);
int getc(FILE* stream);
int getchar();
getc函数作用和fgetc一样,getchar函数的作用相当于getc(stdin),它从标准输入里读取下一个字符。
3.5.8 fputc、putc和putchar函数
fputc函数把一个字符写到一个输出流中,它返回写入的值,如果失败,则返回EOF
#include <stdio.h>
int fputc(int c, FILE* stream);
int putc(int c, FILE* stream);
int putchar(int c);
putchar函数相当于putc(c, stdout),它把单个字符写到标准输出。