首页 / 操作系统 / Linux / linux程序设计文件目录操作学习小结
linux程序设计文件目录中比较重要的设备文件有三个,它们是/dev/console,/dev/tty和/dev/null 1,/dev/console设备:系统控制台,出错和诊断信息通常会被发送到这个设备。 2,/dev/tty设备:进程控制终端的一个假名。 3,/dev/null:空设备,所以写向这个设备的输出都将被丢弃。而读这个设备会立刻返回一个文件尾标志。 常用访问文件的函数: open: read: write: close: ioctl:把控制信息传递到设备驱动程序。 文件描述符: 0:标准输入; 1:标准输出; 2:标准错误; open系统调用: 建立一条到文件或者设备的访问路径,如果操作成功,它将返回一个文件描述符,后续的read,write等系统调用就将使用该文件描述符对打开的那个文件进行操作。 #include #include #include int open (const char *path,int oflags); int open (const char *path,int oflags,mode_t mode); oflags参数是通过把要求的文件访问模式与其它可选模式按位or得到的。 文件访问模式:O_RDONLY(只读)O_WRONLY(只写)O_RDWR(读写) 其它可选模式: O_APPEND(把写入的数据追加在文件的末尾) O_TRUNC(把文件的长度设置为0,丢弃其中现有的内容) O_CREAT(按mode中给出的模式创建文件) O_EXCL(与o_creat一起使用,如果文件存在,open操作失败) mode参数: S_IRUSR:读权限,文件属主 S_IWUSR:写 S_IXUSR:执行权限,文件属主 S_IRGRP:读 S_IWGRP:写 S_IXGRP:执行权限,文件所在分组 S_IROTH:读 S_IWOTH:写 S_IXOTH:执行权限,其它用户 如: open ("myfile", O_CREAT, S_IRUSR | S_IXOHT); 创建一个名为myfile的文件,文件的属主拥有它的读操作权限,其它用户只能执行。Mode会受umask决定。(chmod umask myfile) close系统调用: 终止一个文件描述符fildes与它文件之间的关联。 #inlcude int close (int fildes); write系统调用: 把缓冲区BUF里的前nbytes个字节写入与文件描叙符fildes相关联的文件中去。 #include size_t write(int fildes,const void *buf ,size_t nbytes); read系统调用: 与文件描叙符fildes相关联的文件中的读入前nbytes个数据读,并把它们放到字节缓冲区BUF。它的返回值是实际读入的字节数,它可能会小于nbytes的值。 #include size_t read(int fildes,const void *buf ,size_t nbytes); ioctl系统调用: 提供一个对设备行为,设备描述符,设备底层服务的配置工作等方面进行控制的操作界面。 #include int ioctl(int fildes,int cmd, ... ); lseek,fstat,stat,lstat系统调用,先跳过; 标准IO库: fopen函数: #include FILE *fopen(const char *filename,const char *mode); 打开模式有: "r" "rb" 只读方式打开 "w" "wb" 以写方式打开,并把文件长度截短为零 "a" "ab" 以写方式打开,新内容追加在文件尾 "r+" "rb+" "r+b" 以修改方式打开,(读写) "w+" "wb+" "w+b" 以修改方式打开,并把文件长度截短为零 "a+" "ab+" "a+b" 以修改方式打开,新内容追加在文件尾 字母“b”表示文件是一个二进制文件。UNIX把所以文件都看成是二进制文件。 mode参数是一个字符串,所以要使用“r”,而不是‘r’。 fread 函数: #include size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); 从文件流stream读数据到ptr指定的数据缓存区里。它的返回值是成功地读到数据缓存区里的记录个数,而不是字节数。 fwrite函数: size_t fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream); 从指定数据缓存取数据写到输出流去。 fclose函数: int fclose (FILE *stream); 关闭指定的文件流stream,使所以尚未写出的数据都写到文件里去。 fflush函数: #include int fflush(FILE *stream); 把文件流里的现有数据立刻写入文件。 fseek函数: int fseek(FILE *stream, long int offset, int whence); 为下一次读写操作设置偏移位置。 fgetc,getc,getchar函数: #include int fgetc(FILE *stream); 从文件流里取出下一个字节并把它当做一个字符返回。当它达到文件尾或出现错误时,返回EOF。 int getc (FILE *stream); 作用相当于fgetc,但我们可以在stream参数不允许有副作用的情况下把getc实现为一个宏。 int getchar(); 相当getc(stdin), fputc,putc,putchar函数: int fputc(int c, FILE *stream); 把一个字符写到输出文件流里,返回值为刚写的那个值,失败返回EOF。 int putc(int c, FILE *stream); 相当于fputc,但可以实现为一个宏。 int putchar(int c); 相当putc(stdout); fgets,gets函数: char* fgets(char *s,int n, FILE *stream);从输入文件流读取n-1个字符加上" "写到s指向的字符串去。 char* gets(char *s);对传输的字符个数没限制,避免使用! printf ,scanf 等跳过。 chmod,chown 略。 unlink,link ,symlink系统调用: #include int unlink (const char *path); int link(const char *path1, const char *path2); int symlink(const char *path1, const char *path2); mkdir,rmdir系统调用: #include int mkdir (const char *path, mode_t mode); int rmdir (const char *path); chdir,getcwd系统调用: #include int chdir(const char *path);改变工作目录。 int *getcwd(char *buf,sizo_t size);把当前子目录的名字写到给定的BUF里。 扫描子目录函数: 与子目录相关的函数是在一个名为dirent.h的头文件里被申明的。它们使用一个名为DIR的结构做为子目录处理操作的基础。“子目录流”(directory stream)指向DIR结构的指针,被用来完成各种普通的子目录操作。 opendir,readdir函数: #include #include DIR * opendir(const char *name); 打开一个子目录并建立一个子目录流。 struct dirent *readdir(DIR *dirp); 返回一个结构体指针,结构体里保存着子目录流dirp中下一个目录数据项的有关资料。 telldir函数: long int telldir (DIR *dirp); 返回值里记录着子目录流里的当前位置。可在seekdir调用里利用这个值对当前位置再做一次子目录扫描。 seekdir函数: void seekdir(DIR *dirp, long int loc);对dirp指定的子目录流中的目录数据项的指针进行设置,loc的值用来设置指针的位置。 closedir函数: int closedir(DIR *dirp);关闭一个子目录并释放与之相关联的资源。 mmap函数:将创建一个指向一段内存的指针,该指针将与通过一个打开的文件描述符来访问的文件的内容相关联。 #include void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); 用传递off参数的办法可以改变经共享内存段访问的文件中数据的起始偏移值。 msync函数:把该内存段的某个部分或整段中的修改写回到被映射文件里,(或者从被映射的文件里读出) #include int msync(void *addr, size_t len, int flags); munmap函数:释放内存段 int munmap(void *addr, size_t len);
收藏该网址