linux程序设计第三章 文件 目录操作读书笔记

原创 2007年09月28日 10:39:00

第三章:文件系统
比较重要的设备文件有三个,它们是/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 <fcntl.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);

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<unistd.h>
int close (int fildes);

write系统调用:
把缓冲区BUF里的前nbytes个字节写入与文件描叙符fildes相关联的文件中去。
#include <unistd.h>
size_t write(int fildes,const void *buf ,size_t nbytes);

read系统调用:

与文件描叙符fildes相关联的文件中的读入前nbytes个数据读,并把它们放到字节缓冲区BUF。它的返回值是实际读入的字节数,它可能会小于nbytes的值。
#include <unistd.h>
size_t read(int fildes,const void *buf ,size_t nbytes);


ioctl系统调用:

提供一个对设备行为,设备描述符,设备底层服务的配置工作等方面进行控制的操作界面。
#include <unistd.h>
int ioctl(int fildes,int cmd, ... );


lseek,fstat,stat,lstat系统调用,先跳过;

标准IO库:

fopen函数:
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
int fflush(FILE *stream);
把文件流里的现有数据立刻写入文件。

fseek函数:
int fseek(FILE *stream, long int offset,  int whence);
为下一次读写操作设置偏移位置。

fgetc,getc,getchar函数:
#include <stdio.h>
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个字符加上"/0"写到s指向的字符串去。
char* gets(char *s);对传输的字符个数没限制,避免使用!

printf ,scanf 等跳过。

chmod,chown 略。

unlink,link ,symlink系统调用:
#include <unistd.h>

int unlink (const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);

mkdir,rmdir系统调用:
#include <sys/stat.h>
int mkdir (const char *path, mode_t mode);
int rmdir (const char *path);


chdir,getcwd系统调用:
#include <unistd.h>
int chdir(const char *path);改变工作目录。
int *getcwd(char *buf,sizo_t size);把当前子目录的名字写到给定的BUF里。


-------------------------------------------------------------------------
扫描子目录函数:
与子目录相关的函数是在一个名为dirent.h的头文件里被申明的。它们使用一个名为DIR的结构做为子目录处理操作的基础。“子目录流”(directory stream)指向DIR结构的指针,被用来完成各种普通的子目录操作。

opendir,readdir函数:
#include <sys/types.h>
#include <dirent.h>
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 <sys/mman.h>
void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
用传递off参数的办法可以改变经共享内存段访问的文件中数据的起始偏移值。

msync函数:把该内存段的某个部分或整段中的修改写回到被映射文件里,(或者从被映射的文件里读出)
#include <sys/mman.h>
int msync(void *addr, size_t len, int flags);

munmap函数:释放内存段
int munmap(void *addr, size_t len);

 

深入理解linux内核读书笔记(第三章)

1.  进程是程序执行时的一个实例。 2. 从内核的角度看,进程是系统进行资源分配的实体。 3. linux 通过轻量级进程来支持多线程应用,每一个轻量级进程对应一个线程。    线程之间共享地址空间...
  • learnboy007
  • learnboy007
  • 2015年06月17日 16:14
  • 414

读书笔记(一)——《Java核心技术卷一》第三章Java的基本程序设计结构

暑假过了一大半,刚结束实训回来休息了一个多星期才开始看书学习,争取在开学前把三本砖头书能啃多一点是一点。 由于没把编程思想带回来,于是买了本Java核心技术看看,刚开始看确实有不少收获,虽然说做过项...
  • luqiren
  • luqiren
  • 2017年08月05日 21:55
  • 236

Linux 下C语言文件-目录基本操作

仅提供大概参考~ 纯手写未调试/** *编写一个程序,提供一个参数(文件名/路径) *如果该参数对应文件名/目录名不存在,则创建之 *设置创建者拥有RWX权限,其他用户只有R-X权限 *如果对应文件存...
  • bykjscn
  • bykjscn
  • 2012年10月31日 16:19
  • 3936

iOS-Effective Objective-C 2.0 读书笔记(三)

第三章的内容主要是说接口和API设计相关的注意事项。比如说我们自己写的代码需要设计以便于代码复用时,应该注意的一些问题包括哪些。简单总结  有些注意事项实际上很简单,而且很常见,我觉得并不需要太长篇幅...
  • linyousong
  • linyousong
  • 2016年04月29日 22:31
  • 415

【Effective Objective-C 2.0读书笔记】第三章:接口和API设计

一旦你完成了一个应用,你可能会希望在以后的工程中重用部分代码。你也可能会发布一些代码以供其他人来使用。这意味着你需要使用Objective-C的范式和理解众多的陷阱。...
  • freeWayWalker
  • freeWayWalker
  • 2015年07月06日 15:23
  • 594

<机器学习>(周志华)读书笔记 -- 第三章 线性模型

3.1 基本形式 为啥叫做线性模型呢?因为这个很像是f(x)=ax+b的形式,在图形上看是一个直线,只是斜率和截距不一样而已。 3.2 线性回归 这个就有意思了,这里x是给的数值,f(x)是预测...
  • geng333abc
  • geng333abc
  • 2017年02月19日 19:18
  • 764

《机器学习》--周志华 (第三章学习笔记)

线性模型基本形式线性模型试图学得一个通过属性的线性组合来进行预测的函数,即f(x)=w1x1+w2x2+...+wdxd+bf(x) = w_1x_1 + w_2x_2+ ... +w_dx_d +b...
  • Cristal_yin
  • Cristal_yin
  • 2017年07月30日 08:30
  • 459

第三章 Linux常用命令(目录操作)

1.查看目录信息 ls /          查看根目录下的子节点(文件夹和文件)信息 > ls  -la      是显示隐藏文件   -l是以更详细的列表形式显示> ls -l         ...
  • superboyLM
  • superboyLM
  • 2017年05月26日 17:01
  • 209

Objective-C 程序设计 第三章

#import @interface Fraction : NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setD...
  • Xiemx
  • Xiemx
  • 2015年10月17日 12:34
  • 338

java程序设计基础_陈国君版第五版_第三章习题

11.编写程序,从键盘上输入一个浮点数,然后将该浮点数的整数部分输出。 import java.util.Scanner;public class Main3_11 { public static ...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月07日 15:05
  • 2226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux程序设计第三章 文件 目录操作读书笔记
举报原因:
原因补充:

(最多只允许输入30个字)