第二章 Linux 文件操作

第二章 Linux 文件操作
第二章 Linux 文件操作

第二章 Linux 文件操作(4学时)

实验一文件属性和无缓冲I/O

实验目的

1.熟悉Linux文件系统属性控制

2.掌握不带缓存的文件I/O程序设计方法

实验内容

1.修改文件权限:用touch 新建一文件file,查看文件权限。

(1)命令提示符下 chmod 将文件权限改为:同组用户可读可写,其他用户可写权限,所有者权限不变。

(2)编程修改文件权限为所有者具有读写权限,其他用户只有读权限。

2.设计一程序通过设置文件权限掩码,使得新建文件newfile具有所有者读写,其他只读

权限,并调用ls命令查看文件。

3.设计一程序,要求判断文件“/etc/passwd”最后一次修改时间。

4.设计一程序,要求打开文件“pass”,如果没有这个文件,新建文件,权限设置为所有

者读写权限,利用write函数将键盘输入字符串写入文件,并查看该文件。

5.设计一程序,使用read函数从源文件读取数据,再用write函数写入到目标文件,源

文件名和目标文件名都由键盘输入。

实验指导

一、存取权限

文件存取权限定义文件访问方式(mode_t取值)

在对文件执行相应操作前,有必要读取该文件的属性,文件的属性一般由struct stat 数据结构的成员变量保存。Linux 读取文件属性的函数stat 声明如下:

#include

#include

#include

int stat(const char *file_name, struct stat *buf);

第一个参数为欲读取状态的文件,可以使用绝对路径或相对路径;

第二个参数为读取的文件状态存放的临时数据结构buf。

struct stat 数据结构定义如下:

come from /usr/include/asm/stat.h

struct stat {

unsigned short st_dev; //设备号

unsigned short __pad1;

unsigned long st_ino; //节点

unsigned short st_mode; //模式

unsigned short st_nlink; //连接

unsigned short st_uid; //用户ID

unsigned short st_gid; //组ID

unsigned short st_rdev; //设备类型

unsigned short __pad2;

unsigned long st_size; //

unsigned long st_blksize; //块大小

unsigned long st_blocks; //块数量

unsigned long st_atime; //最后一次访问时间

unsigned long __unused1;

unsigned long st_mtime; //最后一次修改时间

unsigned long __unused2;

unsigned long st_ctime; 属性时间

unsigned long __unused3;

unsigned long __unused4;

unsigned long __unused5;

}

二、掩码umask

在创建文件时,系统需要给该文件一个默认的权限,根据系统的安全性,用户可以自己设置当前系统,创建一个文件时的默认权限为0666-umask。

设置创建文件的掩码函数为umask,其声明如下:

#include

#include

mode_t umask(mode_t mask);

函数如果执行成功,将设置系统的umask 值为参数mask,并返回系统原来文件权限umask 值。如果执行失败,将返回错误信息。

建立文件,文件的权限为0666-mask;

建立目录,目录权限为0777-mask。

三、无缓冲I/O

1.creat

creat 函数创建文件。函数声明如下:

#include

#include

#include

int creat(const char *pathname, mode_t mode);

第一个参数char *__file 为欲创建文件的文件路径。

第二个参数mode 为该文件的访问权限。

如果调用成功,将返回所创建的文件描述符,若有错误返回-1,并把错误代码设置为erron。

例如:fd=creat(“./2-5file",S_IRUSR);

2.open

打开文件。在对文件进程操作前,需要打开该文件,获得该文件的文件描述符,打开文件的系统调用为open 函数。其声明如下:

#include

#include

#include

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

参数说明如下:

第一个参数是欲打开文件的文件名指针。

第二个参数打开文件的方式。各方式定义如下:

//come from /usr/include/bit/fcntl.h

如果欲打开的文件不存在,则可以使用open函数自动创建该文件,即“O_CREAT”打开方式,此时需要用到第三个参数,它规定了文件的权限。在设置权限时,可以采用直接设置

为八进制的方式,如0666。

此函数调用成功后(所检查的权限存在或文件创建成功),将返回所打开的文件的文件描述符(int 类型),如果调用失败,将返回-1。

例如:fd=open(“./2-6file",O_CREAT|O_TRUNC|O_WRONLY,0600)

3.close

关闭文件。当完成对文件的操作后,应关闭文件,将相应的内容全部写回到文件中,即让数据写回磁盘。使用close 函数来关闭文件。其函数声明如下:

#include

int close(int fd);

此函数只有一个参数,该参数为调用open 函数打开文件时返回的文件描述符。

4.read/write

1.读文件内容

使用read 函数从一个文件中读取数据。此函数声明如下:

#include

ssize_t read(int fd, void *buf, size_t count);

read( )把参数fd所指的文件count传送到buf 指针所指的内存中,若参数count为0,则read()不起作用并返回0。返回值为实际读取到的字数。如果返回0,表示已到达文件尾部或无数据可读。文件读写位置会随读取到的字节移动。

成功调用后(此时count大于0),read()会将文件的st_atime 字段标记为更新,并返回读取的字节数,此数字绝不会大于count。在下列情况下返回的值可能小于count:文件中剩余的字节数小于count,read()请求已被某个信号中断。

2.写内容到文件

打开文件后,可以通过write 函数往其中写入数据。此函数声明如下:

#include

ssize_t write(int fd, const void *buf, size_t count);

此函数尝试从buf 所指向的缓冲区中将count个字节写入与打开文件描述符fd 关联的文件内。如果count为0,write()将返回0。

如果write()在写入任何数据之前被信号中断,则返回?1 并将errno 设置为[EINTR]。

如果write()在成功写入一些数据之后被信号中断,则返回写入的字节数。

5.lseek

在对文件进行读写时,当打开文件时通常都有一个读写位置,通常是指向文件头部,若是以附加的方式打开文件,则在文件尾部。lseek 函数用来修改文件的读写位置。声明如下:#include

#include

off_t lseek(int fd, off_t offset, int whence);

第一个参数fd 为已经打开的文件,第二个参数offset 为根据参考位置(第三个参数whence)来移动读写位置的位移数。whence 为下列其中一种:

# define SEEK_SET 0 //文件起始位置

# define SEEK_CUR 1 //当前位置

# define SEEK_END 2 //文件结束位置

当执行成功则返回目前读写位置,也就是距离文件头部的字节数,若错误则返回-1。

6.dup/dup2

复制文件描述符。函数声明如下:

#include

int dup(int oldfd);

int dup2(int oldfd, int newfd);

实验二缓冲IO和特殊文件

实验目的

1.了解和掌握基于流的文件I/O程序设计

2.掌握特殊文件的程序设计方法

实验内容

1. 设计一程序,要求用带缓存的流文件I/O操作,在“./tmp”目录下,打开名称为“tmpfile”的文件。如果该文件不存在,则创建此文件;如果存在,将文件清空后关闭。

2.设计一程序,要求用带缓存的流文件I/O操作,利用fputc函数把键盘上输入的字符串写入文件“./tmp/2-2tmp”,如果该文件不存在,则创建此文件;多次运行程序,多次输入字符串后,文件“/tmp/2-2tmp”中只保存最后一次输入的字符串(若要保存全部输入的字符串,如何改写程序?)。

3.设计一程序,要求新建一个目录newdir和它的子目录childdir,预设权限为rwx—x—x,打开newdir目录并输出该目录下的目录名和inode,关闭该目录文件。

4.设计一程序,要求为“/bin/ls”文件建立一个软链接“ls1”和一个硬链接“ls2”,并查看两个链接文件和“/bin/ls”文件,并运行./ls1和./ls2,查看结果。

思考题

考虑I/O效率问题:分别用read/write; getc/putc; fgetc/fputc; fgets/fputs连接两个文件时,比较效率有何不同?

实验指导

一、缓冲I/O

标准I/O 提供了3 种类型的缓冲区。

1.全缓冲区:这种缓冲区要求填满整个缓冲区后才进行I/O 系统调用操作。对于磁盘文件通常使用全缓冲区访问。第一次执行I/O 操作时,ANSI 标准的文件管理函数通过调用malloc 函数获得需使用的缓冲区。默认大小为8192。

2.行缓冲区。在这种情况下,当在输入和输出中遇到换行符时,标准I/O 库执行I/O 系统调用操作。当流涉及一个终端时(例如标准输入和标准输出),使用行缓冲区。

3.无缓冲区。标准I/O 库不对字符进行缓存。如果用标准I/O 函数写若干字符到不带缓冲区的流中,则相当于用write 系统调用函数将这些字符写至相关联的打开文件。标准出错流stderr 通常是不带缓冲区的,这使得出错信息能够尽快地显示出来。

对于标准输入输出设备,ANSI C 要求具有以下缓冲区特征:

标准输入和标准输出设备:当且仅当不涉及交互作用设备时,标准输入流和标准输出流才是全缓冲区的。

标准错误输出设备:标准出错决不会是全缓冲区的。

二、标准I/O函数

1.fopen/fclose

(1)打开文件

在对文件进行操作之前,需要将它与流联系在一起。ANSI C 库中打开文件函数fopen 声明如下:

#include

FILE *fopen(const char *filename, const char *mode);

函数第一个参数是指向欲打开的文件名字符串的指针(例如“/ect/services”),可以使用绝对路径或相对路径来指定;

第二个参数为打开模式。

如果执行成功,将返回打开文件的文件指针,如果执行失败,将返回NULL。

(2)关闭文件

在完成对流对象的操作后,需要关闭该流对象,在关闭该流对象之前,应将缓冲区中的相关内容回写到磁盘文件中(这一操作由系统完成)。关闭某个流对象操作使用fclose 函数。

#include

int fclose(FILE *fp);

如果执行成功,将返回0,否则返回EOF,并设置错误标识位error 全局变量。2. fgetc/fputc

字符读写文件流。

(1)字符读操作。字符读操作是指每次标准I/O 调用只读出流中的一个字符。相关函数声明如下:

#include

int getc(FILE *fp); //从流中读一个字符

int fgetc(FILE *fp);

int getchar(void); //从标准输入设备读一个字符

若调用成功则返回读到的内容,如果失败则返回EOF(-1)。

(2)字符写操作。字符写操作是指每次标准I/O 调用只写一个字符到流中。相关函数声明如下:

#include

int putc(int c, FILE *fp); //写字符c 到流stream 中

int fputc(int c, FILE *fp);

int putchar(int c); //写字符c 到标准输出设备

若调用成功则返回内容,如果失败则返回EOF(-1)。

3.fgets/fputs

行读写文件流

(1)行读出操作。行读出操作是指每次标准I/O 调用只从标准流中读出一行(没有达到行限制)字符。fgets()函数声明如下:

#include

char *fgets(char *s, int size, FILE *stream);

函数从将字符从stream 读入s所指向的数组,直到读取size? 1字符、换行符(传输到s)或遇到文件结束标志为止,字符串以空字符结束。

另外,从标准设备输入读取数据还可以使用gets()函数。声明如下:

char *gets(char *s);//此函数尽量不要使用,因其对读出量没有限制。

此函数将字符从标准输入流stdin读入s所指向的数组,直到遇到换行符或文件结束标志为止,同时换行符被忽略,字符串以空字符结束。

成功完成后,fgets()和gets()都返回s,如果流位于文件末尾,则设置此流的文件结束指示器,并返回一个空指针。如果出现读取错误,则设置了流的错误指示符,并将errno 设置为指示此错误,返回一个空指针。

(2)行写入操作。行写入操作是指每次标准I/O 调用只写一行字符到标准流中。相关函数声明如下:

#include

int fputs(const char *s, FILE *stream);

int puts(const char *s); //输出流到标准出设备中

puts()将s指向的以空字符结尾的字符串(后接换行符)写入标准输出流stdout 。

fputs()将s指向的以空字符结尾的字符串写入指定输出stream,但不追加换行符。这两个函数都不写入终止空字符。

成功完成后,这些函数均返回非负数。否则返回EOF,并为流设置错误指示符,将errno 设置为指示出错。

4.fread/fwrite

块读写文件流是指每次读出与写入的数据量可以由自己设定。

(1)块读出操作。块读出操作函数声明如下:

#include

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

此函数将从标准流中读取nmemb个大小为size的对象。

第一个参数为指向欲存放读取的对象空间指针,即读取的对象的存放位置;

第二个参数为读取对象的大小,例如读出一个结构体buf,此参数可以设置为sizeof (struct buf);

第三个参数为读取对象的个数;

第四个参数为读取的流。

此函数返回实际读取到的对象个数,如果此值比参数nmemb小,则代表可能读到了文件的尾部或者出错,这时必须用feof()或者ferror()来检测发生了什么情况。

(2)块写入操作。块写入操作函数声明如下:

size fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

此函数将向标准的流中写入nmemb个大小为size 的对象。

第一个参数为指向欲写入的对象的数据空间指针,即写入的对象的存放位置;

第二个参数为写入对象的大小,例如写入一个结构体buf,此参数可以设置为sizeof (struct buf);

第三个参数为写入的个数;

第四个参数为写入的数据流。

如果执行成功,此函数返回实际写入的对象个数,否则返回-1。

三、目录文件

1.mkdir/rmdir

在Linux 系统管理层面,用户可以在shell 提示符使用mkdir 和rmdir 命令来创建和删除目录,在编程应用中,则使用mkdir 函数和rmdir 函数来实现这一操作。mkdir 函数声明如下:

#include

#include

int mkdir(const char *pathname, mode_t mode);

第一个参数为欲创建的目录文件路径;

第二个参数为该目录的访问权限,权限参数同创建文件时的文件权限。

删除目录函数rmdir 声明如下:

#include

int rmdir(const char *pathname);

此函数只有一个参数,即欲创建的目录文件的路径。

以上函数如果执行成功,将返回0,否则返回-1,并置全局错误变量errno。

(2)修改当前进程工作目录。

chdir()和fchdir()函数可用来修改当前进程工作目录,函数声明如下:

#include

int chdir(const char *path); //修改进程工作目录

int fchdir(int fd); //修改进程工作目录为fd 文件描述符

chdir()和fchdir()可使path 或fd指向的目录成为当前工作目录,即不以/开头的路径名的路径搜索起点。path 指向目录的路径名。fildes 是目录的打开文件描述符。

这两个函数如果执行成功将返回值0。否则返回-1,并且设置errno 以指明错误。四、连接文件

连接文件类似于Windows 的快捷方式。连接文件类似于Windows的快捷方式。连接文件又分为软连接文件和硬连接文件。当使用“ls -l”命令查看时,这类文件权限位前显示为字母“l”(link)。

1、软连接文件:软连接文件又叫符号连接文件,这类文件包含了另一个文件的路径名。它可以连接任意文件或目录,可以连接不同文件系统的文件,甚至可以连接不存在的文件,

也可以循环连接自己。用ln -s 命令可以生成一个软连接文件,如下:

[root@localhost ~]# ln -s /root/install.log /root/install.log_link//创建软连接

[root@localhost ~]# ls /root/install.log_link -l

lrwxrwxrwx 1 root root 17 Apr 7 02:06 /root/install.log_link -> /root/install.log

在对软连接文件进行读写操作时,系统会自动把该操作转换为对源文件的操作,但删除软连接文件时,系统仅仅删除软连接文件,而不删除源文件本身。

symlink 可以创建一个符号连接,即软连接文件。

#include

int symlink(const char *oldpath, const char *newpath);

第一个参数为源文件的路径,即为哪个文件创建连接;

第二个参数为新连接文件的路径。

此函数如果执行成功,将返回0,否则返回-1,并置全局错误变量errno。

readlink()函数读取连接文件的内容,其函数声明如下:

#include

int readlink(const char *path, char *buf, size_t bufsiz);

2、硬连接:硬连接是已存在文件的另一个名字。建立硬连接的命令如下:

[root@localhost ~]# ln -d /root/install.log /root/install.log_link_hard//创建硬连接

[root@localhost ~]# ls /root/install.log_link_hard -l

-rw-r--r-- 2 root root 62237 Jul 31 2006 /root/install.log_link_hard

创建硬连接文件有以下限制:

不允许给目录创建硬连接。

只有在同一文件系统中的文件之间才能创建硬连接。

对硬连接文件进行读写和删除操作时,结果和软连接相同。但删除硬连接文件的源文件时,硬连接文件仍然存在,而且保留了原有的内容。

在Linux 下 C 应用编程中,使用link 函数创建连接文件。

#include

int link(const char *oldpath, const char *newpath);

第一个参数为源文件的路径,即为哪个文件创建连接;

第二个参数为新连接文件的路径。

如果要执行删除某文件(包括连接文件)操作,则可使用unlink()函数,其函数声明如下:

#include

int unlink(const char *pathname);

unlink()系统调用删除由pathname指向的路径名所指定的目录条目。当删除所有指向文件的链接,并且没有进程打开该文件时,该文件占有的空间被释放,并且该文件不复存在。如果在删除最后一个链接时有一个或多个进程打开了该文件,则只有目录条目被立即删除,以便还没有打开该文件的进程不能访问该文件。在所有进程关闭其对文件的引用后,如果不再有指向该文件的链接,则该文件占有的空间被释放,该文件不复存在。

此函数如果执行成功,将返回0,否则返回-1,并置全局错误变量errno。

Linux常用命令

Linux常用命令1、查看当前工作路径:pwd 示例: 2、列出目录中的内容:ls 格式: ls [选项] [目录名称] 常用选项和参数: -l :显示文件和目录的详细信息。 -d : 显示目录名称而非其内容。 -S : 按文件和目录的大小排序。 -t : 按文件和目录的更改时间排序。 -a :显示目录中的文件和文件夹,包括隐藏文件。 示例: ?查看当前目录下的文件和文件夹详细信息。 3、切换工作目录:cd 格式: cd [目录名称] (直接执行cd命令,进入个人主目录。)示例:

4、创建目录:mkdir 格式: mkdir [选项] [目录名称] 常用选项和参数: -p :确保目录名称存在,如果目录不存在的就新创建一个。 示例: ?在/test/test1目录下创建一个名称为“test2”的目录。(/test目录下还没有创建test1,添加-p参数一次性创建) 5、创建文件:touch 格式: touch [文件名称] 示例: ?创建一个名称为“linux”的文件。 6、删除文件或目录:rm 格式: rm [选项] [文件或目录名称] 常用选项和参数: -f :强制删除文件或目录。 -r :递归处理,将指定目录下的所有文件及子目录一并处理。 示例: ?删除一个名称为“/test1”的目录。

7、移动或更名现有的文件或目录:mv 格式: mv[选项][源文件或目录][目标文件或目录] 常用选项和参数: -f :若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。 示例: ?将/etc/hosts文件移动到/home目录。 8、复制文件或目录:cp 格式: cp[选项][源文件或目录][目标文件或目录] 常用选项和参数: -a :此参数的效果和同时指定"-dpR"参数相同。 -d :当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录。 -p :保留源文件或目录的属性。 -R :递归处理,将指定目录下的所有文件与子目录一并处理。 示例: ?复制/var/log/messages文件到/home目录。 cp /var/log/messages /home ?复制/var/log文件夹到/home目录。 cp -a /var/log /home

实验 Linux文件和目录操作

实验Linux文件和目录操作(1) 一、实验内容 练习Linux文件和目录操作命令。 二、实验目的 掌握文件与目录管理命令 掌握文件内容查阅命令 三、实验题目 1. 文件与目录管理 (1) 查看CentOS根目录下有哪些内容? (2) 进入/tmp目录,以自己的学号建一个目录,并进入该目录。 (3) 显示目前所在的目录。 (4) 在当前目录下,建立权限为741的目录test1,查看是否创建成功。 (5) 在目录test1下建立目录test2/teat3/test4。 (6) 进入test2,删除目录test3/test4。 (7) 将root用户家目录下的.bashrc复制到/tmp下,并更名为bashrc (8) 重复步骤6,要求在覆盖前询问是否覆盖。 (9) 复制目录/etc/下的内容到/tmp下。 (10) 在当前目录下建立文件aaa。 (11)查看该文件的权限、大小及时间 (12) 强制删除该文件。 (13) 将/tmp下的bashrc移到/tmp/test1/test2中。 (14) 将/test1目录及其下面包含的所有文件删除。 2. 文件内容查阅、权限与文件查找 (1) 使用cat命令加行号显示文件/etc/issue的内容。 (2) 反向显示/etc/issue中的内容。 (3) 用nl列出/etc/issue中的内容。 (4) 使用more命令查看文件/etc/man.config (5) 使用less命令前后翻看文件/etc/man.config中的内容 (6) 使用head命令查看文件/etc/man.config前20行 (7) 使用less命令查看文件/etc/man.config后5行 (8) 查看文件/etc/man.config前20行中后5行的内容 (9) 将/usr/bin/passwd中的内容使用ASCII方式输出 (10) 进入/tmp目录,将/root/.bashrc复制成bashrc,复制完全的属性,检查其日期 (11) 修改文件bashrc的时间为当前时间

Linux文件系统分析

Linux文件系统分析 一、什么是文件系统 . 文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区的目录结构;一个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点;一旦文件系统被挂载。文件系统是在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区组织文件的方法,如NTFS或FAT;文件系统涉及两个非常独特的事情,目录树或在磁盘或分区上文件的排列;文件系统是基于操作系统的,建立在磁盘媒质上的可见体系结构,例如这种结构对于一个Unix用户来说可以用ls 或其它工具可以看到;文件系统是基于被划分的存储设备上的逻辑上单位上的一种定义文件的命名、存储、组织及取出的方法;在计算机业,一个文件系统是有组织存储文件或数据的方法,目的是易于查询和存取。文件系统是基于一个存储设备,比如硬盘或光盘,并且包含文件文件物理位置的维护;也可以说文件系统也是虚拟数据或网络数据存储的方法。 二、常见的文件系统 Linux系统核心支持十多种文件系统类型:jfs、 ReiserFS、ext、ext2、ext3、iso9660、xfs、 minx、msdos、umsdos、Vfat、NTFS、Hpfs、Nfs、smb、sysv、proc等。这里我们对最常用的几个文件系统的发展情况和优缺点作详细介绍:ext、ext2、ext3、jsf、、xfs、ReiserFS。一、 ext ext是第一个专门为Linux的文件系统类型,叫做扩展文件系统。它在1992年4月完成的。它为Linux的发展取得了重要作用。但是在性能和兼容性上存在许多缺陷。现在已经很少使用了。二、 ext2 ext2是为解决ext文件系统的缺陷而设计的可扩展的高性能的文件系统。又被称为二级扩展文件系统。它是在1993年发布的,设计者是Rey Card。ext2是Linux文件系统类型中使用最多的格式。并且在速度和CPU利用率上较突出,是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。Ext2 可以支持256字节的长文件名,其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的Intel x86兼容处理器的系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 6384GB。尽管Linux可以支持种类繁多的文件系统,但是2000年以前几乎所有的Linux发行版都用ext2作为默认的文件系统。 ext2的缺点:ext2的设计者主要考虑的是文件系统性能方面的问题。ext2在写入文件内容的同时并没有同时写入文件的meta-data (和文件有关的信息,例如:权限、所有者以及创建和访问时间)。换句话说,Linux先写入文件的内容,然后等到有空的时候才写入文件的meta- data。这样若出现写入文件内容之后但在写入文件的meta-data之前系统突然断电,就可能造成在文件系统就会处于不一致的状态。在一个有大量文件操作的系统中出现这种情况会导致很严重的后果。另外但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,尽管文件系统的容量上限为 6384G但是实际上能使用的文件系统容量最多也只有 2048GB。三、 ext3 ext3是由开放资源社区开发的日志文件系统,主要开发人员是Stephen tweedie。ext3被设计成是ext2的升级版本,尽可能地方便用户从ext2fs向ext3fs迁移。ext3在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性。这个文件系统被称为ext2

linux查看文件大小命令

linux查看文件大小命令 linux系统不像windows系统,查看文件可以随时点击右键,linux中碳钢命令来查看文件大小,下面由小编为大家整理了linux查看文件命令的相关知识,希望对大家有帮助! linux查看文件命令详解 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件] 常用参数: -a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或–total 除了显示目录或文件的大小外,同时也

显示所有目录或文件的总和。 -D或–dereference-args 显示指定符号连接的源文件大小。 -h或–human-readable 以K,M,G为单位,提高信息的可读性。 -H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。 -k或–kilobytes 以1024 bytes为单位。 -l或–count-links 重复计算硬件连接的文件。 -L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。 -m或–megabytes 以1MB为单位。 -s或–summarize 仅显示总计,即当前目录的大小。

1_Linux C 文件与IO操作

Linux 文件与I/O操作 Andrew Huang 课程内容 l系统调用 l底层库函数 l标准库函数 l目录与文件维护 系统调用 l Linux 大部分的系统功能是通过系统调用(System Call)来实现的.如open,send之类. l这些函数在C程序调用起来跟标准C库函数(printf…)非常类似.但是实现机制完全不同. l库函数仍然是运行在Linux 用户空间程序.很多时候内部会调用系统调用. l但系统调用是内核实现的.在C库封装成函数.但通过系统软中断进行调用. –用time命令测试时间,系统时间实际就是系统调用时间累积 l time ./demo1 –用strace 可以跟踪一种程序系统调用使用情况 l strace ./demo1 #不需要调试信息 两者关系 l可以参考C库函数malloc与系统调用sbrk的关系

常见C标准库函数 l printf,getch,scanf l strcpy,strcmp,strlen l memcpy,memcmp,memset l fopen,fwrite,fread 常见系统调用函数 l进程控制:fork(),waitpid() l文件控制open(),write() l网络收发函数socket(),bind(),send(),write() l权限控制 access() l标准C的函数,应该在MSDN和Linux下的man都能同时查找联机帮助 –并且声明定义在stdlib.h当中 l而Linux系统调用只能用man查找相应帮助 –大部分声明定义在unistd.h当中 文件控制 1. Linux文件结构 l Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而统一的接口.在Linux中,一切(或几乎一切)都是文件。 l通常程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。 l大多数情况下,你只需要使用五个基本的函数——open、close、read、write和ioctl l Linux中的任何事物都可以用一个文件代表,或者可以通过特殊的文件进行操作。 l一些特殊文件 –目录 –设备文件 –/dev/console –/dev/tty –/dev/null 2. 底层库函数 l Linux 在底层实现一整套处理文件函数. –这一些函数能处理普通文件,网络socket文件,设备文件等 –全部是系统调用实现的函数 l文件处理函数 –open –打开或创建一个文件 –creat –建立一个空文件 –close –关闭一个文件 –read –从文件读入数据 –write –向文件写入一个数据 –lseek –在文件中移动读写位置

C语言文件流操作函数大全

clearerr(清除文件流的错误旗标) 相关函数feof 表头文件#include 定义函数void clearerr(FILE * stream); 函数说明clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数close,fflush,fopen,setbuf 表头文件#include 定义函数int fclose(FILE * stream); 函数说明fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。错误代码EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数fopen,open,fclose 表头文件#include 定义函数FILE * fdopen(int fildes,const char * mode); 函数说明fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno 中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行hello! feof(检查文件流是否读到了文件尾) 相关函数fopen,fgetc,fgets,fread 表头文件#include 定义函数int feof(FILE * stream);

(完整版)linux文件系统管理-权限管理实验4报告

实验报告 课程Linux系统应用与开发教程实验名称linux文件系统管理-权限管理(高级设置) 一、实验目的 1、掌握Linux文件系统权限的设置 2、掌握linux用户帐号与组管理 3、掌握linux 文件共享的设置方法 4、掌握linux 文件共享的权限设置方法 二、实验内容 1、使用root帐号通过系统提供的6个虚拟控制台登陆到linux,或在x-windows开启一个终端。 2、完成以下的实验内容 (1)、假设你是系统管理员:现要在公司linux服务器系统中新增一些用户与一个用户组。 ?使用groupadd account 添加一个名为account的组 ?使用useradd -G account acc-user1,(该命令将添加一个用户名为acc-user1的用户, 同时会建立一个与用户名同名的私有组(该私有组为用户的默认组,这个组中只有一个用户名),并把该用户将加入account的标准组,同时,按同样的方法建立acc-user2、acc-user3、acc-user4。 ?建立用户后,请使用x-window中的用户与组管理工具查看用户与组建立情况,检查用户与组的归属情况。 (2)、开启多个控制台,分别使用acc-user1、acc-user2、acc-user3登陆系统(可以在控制台分别登陆,也可以在X-windows中多开几个终端程序,默认使用root登陆,然后使用su命令通过切换用户的方式登陆,其语法为“su - user-name”,提示可以在登陆成功后运行命令“id”查看当前登陆的用户属于哪些组,当前的默认组是什么?) (3)、为account组建立一个公共共享目录/home/account-share,满足以下的权限设定要求,以及设置何种的umask: ?该目录的拥有者为acc-user1,所属组为account。 ?在该目录下建立一个/home/account-share/full-share的子目录,修改该目录的权限,使得account组的成员均能在对该目录有完全控制权限,account组外的其他用户没有任何权限,即account组的成员都可以在该目录下建立文件,同时在该子目录full-share下建立的文件,只有文件建立者有权限删除,并且每个用户在该子目录full-share下建立的文件也能自动与该account组成员可读共享。 ?在/home/account-share/为每个用户建立一个与用户名同名的子目录(如/home/account-share/acc-user1为用户acc-user1的目录,其拥有者为acc-user1,所在的组为account),配置该子目录的拥有者有完全控制权限,而同组用户只能读取,同时在用户在该目录下建立的文件,可供同组用户读。 (4)、考虑完成以上的共享目录权限设置,应注意哪些设置。包括目录的权限,目录的拥有者,目录所在的组,具体文件的权限,umask设置等。 (5)、实验报告应体现出使用不同身份的用户对所配置目录的访问测试过程。 三、实验环境 安装有vmware或visual pc软件的window主机,系统中有提供turbolinux或redhat的硬盘

linux高级编程(文件操作)

文件及设备操作 1.基本概念 linux下文件操作的两种方法:原始文件I/O、标准I/O库 标准I/O库: 是C语言的标准输入输出库,是针对流对象FILE 进行的操作,是带缓存的。 原始I/O库:是linux系统提供的文件API,是针对描述描进行的操作,是无缓存机制。 文件描述符:创建一个新文件或打开现有文件时,内核向进程返回的一个非负整数。 其范围在0~OPENMAX之间,OPENMAX是一个宏,不同linux版本取值不同. 系统调用:是操作系统提供的某些功能的接口(函数) 常用设备 /dev/null 空设备,丢弃数据用 /dev/port 存取I/O端口 /dev/ttyN N(0 1 ...) 字符终端 /dev/sdaN N(0 1...) SCSI磁盘 /dev/scdN N(0 1...) SCSI光驱 /dev/mouseN N(0 1...) 鼠标 /dev/socksys 套接字访问端口接口,用于网络传输 /dev/route 路由器控制设备 /dev/fbN N(0 1...) 帧缓冲设备(frame buffer) 重点 /dev/mixer 混音器音量控制、混音控制重点 /dev/dsp 声卡数字采样和数字录音设备用于播放声音和录音经常使用重点(oss) /dev/audio 声卡音频设备用于播放声音和录音,支持sun音频较少使用 /dev/video 视频摄像头用于视频采样(录像) 常用头文件 #include 对外提供的各种数据类型如size_t #include 对外提供的各种结构类型如time_t #include 对外提供的各种错误号的定义用数字代码的错误类型 #include 文件控制的函数定义 #include 串口的结构及定义 #include 声卡的结构及定义 #include 设备控制函数 #include 在C++内加入的头 2.设备的操作函数 #include #include #include #include #include 1)Access

nodejs文件操作模块FS(File System)常用函数简明总结

nodejs文件操作模块FS(File System)常用函数简明总结 件系统操作相关的函数挺多的。首先可以分为两大类。 一类是异步+回调的。一类是同步的。 在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可 1.首先是一类最常规的读写函数,函数名称和形式,应该是起源于C语言的。 复制代码代码如下: fs.open(文件路径,读写标识,[文件mode值,666],回调函数(err,文件句柄fd)); fs.read(文件句柄fd,被写入的buffer,offset,length,position,回调函数(err,bytesRead,buffer)); fs.write(文件句柄fd,被读取的buffer,offset,length,position,回调函数(err,bytesWritten,buffer)); fs.close(文件句柄,回调函数) fs.truncate(文件句柄,截断长度,回调函数); fs.fsync(文件句柄,回调函数); 2.直接对文件进行读写的,用起来比较方便。 复制代码代码如下: fs.readFile(文件名,编码,回调函数(err,data)); fs.writeFile(文件名,数据,编码,回调函数(err)); fs.appendFile(文件名,数据,编码,回调函数(err)); 3.其它常用文件操作 复制代码代码如下: 判断文件是否存在 fs.exists(文件路径,callback(是否存在)); 重命名 fs.rename(旧文件名,新文件名,回调函数); 文件所有者变更 fs.chown(文件名,uid,gid,回调函数);/fs.fchown(文件句柄fd,uid,gid,回调函数);/fs.lchown(链接路径,uid,gid,回调函数); 文件权限变更 fs.chmod(文件名,mode,回调函数);/fs.fchmod(文件句柄,mode,回调函数);/fs.lchmod(链接路径,mode,回调函数); 文件信息 fs.stat(文件路径,回调函数(err.fs.Stats对象));/fs.fstat(文件句柄fd,回调函数(err.fs.Stats对象));/fs.lstat(链接路径,回调函数(err.fs.Stats对象)); 文件时间 fs.utimes(文件路径,访问时间,新建时间,回调函数);/fs.futimes(文件句柄,访问时间,新建时间,回调函数); 监视文件 fs.watchFile(文件名,[options],listener_callback(当前文件的stats,改变前的stats)); fs.unwatchFile(文件名); 4.目录操作 复制代码代码如下: fs.mkdir(路径,权限mode/777,回调函数); fs.rmdir(路径,回调函数);

Linux 0.1.1文件系统的源码阅读

Linux 0.11文件系统的源码阅读总结 1.minix文件系统 对于linux 0.11内核的文件系统的开发,Linus主要参考了Andrew S.Tanenbaum 所写的《MINIX操作系统设计与实现》,使用的是其中的1.0版本的MINIX文件系统。而高速缓冲区的工作原理参见M.J.Bach的《UNIX操作系统设计》第三章内容。 通过对源代码的分析,我们可以将minix文件系统分为四个部分,如下如1-1。 ●高速缓冲区的管理程序。主要实现了对硬盘等块设备进行数据高速存取的函数。 ●文件系统的底层通用函数。包括文件索引节点的管理、磁盘数据块的分配和释放 以及文件名与i节点的转换算法。 ●有关对文件中的数据进行读写操作的函数。包括字符设备、块设备、管道、常规 文件的读写操作,由read_write.c函数进行总调度。 ●涉及到文件的系统调用接口的实现,这里主要涉及文件的打开、关闭、创建以及 文件目录等系统调用,分布在namei和inode等文件中。 图1-1 文件系统四部分之间关系图

1.1超级块 首先我们了解一下MINIX文件系统的组成,主要包括六部分。对于一个360K软盘,其各部分的分布如下图1-2所示: 图 1-2 建有MINIX文件系统的一个360K软盘中文件系统各部分的布局示意图 注释1:硬盘的一个扇区是512B,而文件系统的数据块正好是两个扇区。 注释2:引导块是计算机自动加电启动时可由ROM BIOS自动读入得执行代码和数据。 注释3:逻辑块一般是数据块的2幂次方倍数。MINIX文件系统的逻辑块和数据块同等大小 对于硬盘块设备,通常会划分几个分区,每个分区所存放的不同的文件系统。硬盘的第一个扇区是主引导扇区,其中存放着硬盘引导程序和分区表信息。分区表中得信息指明了硬盘上每个分区的类型、在硬盘中其实位置参数和结束位置参数以及占用的扇区总数。其结构如下图1-3所示。 图1-3 硬盘设备上的分区和文件系统 对于可以建立不同的多个文件系统的硬盘设备来说,minix文件系统引入超级块进行管理硬盘的文件系统结构信息。其结构如下图1-4所示。其中,s_ninodes表示设备上得i节点总数,s_nzones表示设备上的逻辑块为单位的总逻辑块数。s_imap_blocks 和s_zmap_blocks分别表示i节点位图和逻辑块位图所占用的磁盘块数。 s_firstdatazone表示设备上数据区开始处占用的第一个逻辑块块号。s_log_zone_size 是使用2为底的对数表示的每个逻辑块包含的磁盘块数。对于MINIX1.0文件系统该值为0,因此其逻辑块的大小就等于磁盘块大小。s_magic是文件系统魔幻数,用以指明文件系统的类型。对于MINIX1.0文件系统,它的魔幻数是0x137f。

实验11-Linux文件操作(II)

实验11 Linux基本文件操作(II) 实验目的 熟悉与目录和文件操作相关的命令 实验内容与要求 要求 显示当前目录的目录名 改变当前目录 使用ls命令的不同命令选项,来查看文件与目录的属性 创建和删除目录 创建0长度的文件 拷贝、移动、重命名、链接及删除文件 查看文件的内容 内容 一、检查你现在所处的环境 1.登录进入系统:使用pwd命令,确认你现在正处在自己的主目录中。这个目 录就是在你登录时,用户缺省进入的目录。 思考:设置默认主目录的环境变量是PATH 二、查看目录 1.把你的当前目录改变为根目录。 2.确认你的当前目录是根目录,并且使用简单列表命令和长列表命令来列出本 目录中的文件。调用使用-a或-R命令选项的ls命令。每一个命令选项各有什么作用?回到你的用户主目录,并列出所有的文件(包括隐藏文件)3.在你的用户主目录中创建一个名为mydir的新目录。然后调用长列表命令来 查看/home/xxx/mydir目录和/home/xxx目录(只查看目录文件的信息)。注意这里xxx代表的是当前用户名。

4.把目录/home/xxx/mydir变为自己的当前目录。使用touch命令在mydir目录 创建名为myfile1,myfile2的两个文件。 5.使用长列表命令来查看mydir目录中的文件的信息。myfile1与myfile2的文 件大小是多少?再次使用长列表命令,同时列出索引结点(inode)的信息。这两个文件的索引结点号是什么? 6.返回到你的用户主目录,调用ls –R命令来查看你的用户主目录中的目录树 结构。 7.使用rmdir命令删除mydir目录,这个命令工作了吗?请注意rmdir命令不能 删除一个非空的目录。为了删除这个目录,你需要调用命令rm –r。 三、对文件进行操作 1.查看/etc/inittab和/etc/passwd文件的内容。使用命令cat、view、less、more 来分别查看每一个命令的输出方式(提示:/etc/inittab文件包括了系统登录的相关信息,/etc/passwd文件包括了被授权使用该系统的用户的列表)。比较cat、view、less、more这几个命令的异同。 2.拷贝文件/usr/bin/cat到你的用户主目录中。该目录没有cat文件,用find命 令查找 3.拷贝文件/usr/bin/cal到你的用户主目录中。 4.列出你的用户主目录中的文件,你会发现上面两个文件已经被拷贝过来了。 在你的用户主目录中创建一个名为xxxscript的目录 四、对目录进行操作 1.将上面两个文件(cat, cal)移动到xxxscript目录中,并且重新命名为mycat 和mycal; 2.将xxxscript目录变为你的当前目录。列出当前目录中的各个文件名,确认上 述两个文件已经被拷贝过来并已更名。 3.使用mycat命令来显示你的用户主目录中的文件.bash_profile中的内容。返 回到你的用户主目录中。 4.在你的用户主目录中创建另一个子目录goodstuff,拷贝文件/etc/profile到这

C语言基础自学总结之十:文件操作

C语言基础自学总结之十:文件操作 要点: 1.文件操作,就是通过程序,操作文件 2.两个方面:读,写 一.fopen 打开文件 函数原型:FILE *fopen(char *filename, char *type);int fclose(FILE *fp); 头文件:#include 是否是标准函数:是 函数功能:函数fopen:打开一个流,即:打开一个文件。该函数有两个参数,filename是需要打开文件的文件名,type是打 开文件的方式。函数fclose:关闭一个流,即:关闭一个 文件,并释放文件缓冲区。fclose函数与fopen函数是相 对的两个函数。fclose函数的参数是指向文件的指针,应 用该函数用以在程序结束之前关闭文件,并释放文件缓冲 区。这样可以保证文件的数据不流失。 返回值:fopen:FILE类型,如果打开的文件存在,返回指向该文件的指针;如果打开的文件不存在,则在指定的目录下建立该 文件打开,并返回指向该文件的指针。fclose:整型,有错

返回非0,否则返回0。 例子1: #include int main(void) { FILE *FP=fopen("文件","打开方式");//返回值是file是一个 结构体,是一个结构体 的宏。 fclose(FP);//打开之后,用完了,就要关闭文件,fclose是跟 fopen一起使用的一个函数。 return 0; } 二. frend 读取 fread:从流中读取字符串函数 函数原型:int fread(void *buf, int size, int count, FILE *fp);头文件:#include 是否是标准函数:是 函数功能:从fp指向的文件中读取长度为size 的count个数据项,并将它输入到以buf为首地址的缓冲区中。此时,文件指针 fp会自动增加实际读入数据的字节数,即fp指向最后读入 字符的下一个字符位置。

linux总结

1软件通常分为系统软件、应用软件、支撑软件 2 操作系统是用户与计算机硬件之间的界面,它是控制、管理计算机系统内各种硬件和软件资源,有效的组织多道程序运行的系统软件。 3 Linux系统吧计算机系统中的硬件资源和软件资源有机地结合在一起,从而提供丰富的功能,包括:控制硬件、管理资源、提供用户接口,处理输入/输出、监视系统、通信。 4 Linux的优点:1与UNIX系统兼容 2自由软件和源码公开 3 性能高和安全性强 4 便于制定和再开发 5 互操作性高 5 Linux 有俩种版本:核心(Kernel)版本和发行(Distribution)版本 6 Linux核心版本根据约定,若版本号为奇数,则表示该版本加入新内容,但不一定稳定,为测试版本。若版本号为偶数,则表示这是一个可以使用的稳定版本 7 安装红旗Linux需要俩个必备的分区,即一个根文件系统分区(类型为ext3,ext2或reiserfs)和一个交换分区(类型为swap) 8 Linux操作系统支持以下文件类型:普通文件、目录文件、设备文件和符号链接文件。 9 设备文件除了在文件I节点中存放属性信息外,他们不包含任何属性信息外,它不包含任何数据,系统利用它们来标记各个设备驱动器 10 符号链接文件时一种特殊文件,提供对其他文件的参照 11 cp命令将源文件或目录复制到目标文件或目录中 12 rm命令删除文件或目录 13 mv命令对文件或目录重新命令,或者将文件从一个目录移到另一个目录中。 14 wc命令统计指定文件的字节数、字数、行数,并将统计结果显示出来 15 绝对路径名和相对路径名的联系与区别 联系:当为命令指定文件路径名是,要指定俩种路径中一种 区别:绝对路径名总是以斜线字符(/)开头 相对路径不能以斜线字符开头 16 硬链接:建立硬链接时,在别的目录或本目录中增加目标文件的一个目录项,这样的一个文件就登记在多个目录中 17 符号链接(软链接)是将一个路径名链接到一个文件,这些文件是一种特别类型的文件 18 软硬链接的区别:1软链接建立了一个新文件而硬链接没有建立新文件 2 软链接没有硬链接的限制,可以对目录文件建立软链接,也可以在不同文件系统之间建立软链接 19 chgrp命令改变文件或目录所属的用户组 20 chown命令改变某个文件或目录的所有者和所属的组 21 ps命令查看当前系统中运行的进程信息 22 kill命令用来终止一个进程的运行 23 vi编辑器三中工作方式:命令方式、插入方式、ex转义方式 24 退出vi的命令 :wq :ZZ :x :q! 四种 25 执行shell脚本的方式: 1 输入定向到shell脚本 2 以脚本名作为bash 参数 3 将shell脚本的权限设置为可执行 26 名称补全的方法是输入目录或文件名的开头部分,然后按Tab键 27 通配符用于模式匹配(四种 * ? [字符组] !) 27 由双引号括起来的字符除($ ‘ \)均作为普通字符对待

Linux操作题整理

五、实验题(共5题,每题2分,共10分) 写出下列操作命令: 1、查看/etc/boot路径下的所有内容。 Ls –al /etc/boot/* 2、查看文件/etc/hosts的内容。 Cat /etc/hosts 3、增加一个组账号group1,并指定组账号ID分别为10100。Groupadd –g 10100 group1 4、增加一个用户账号user1(UID为2045,并属于组group1)。Useradd –u 2045 –g group1 user1 5、搜索路径/etc下所有以h开头的文件及目录,拷贝到/software 中。 Cp –r /etc/h* /software 1.按顺序写出下面操作步骤中所用到的命令。

1) 创建新目录my目录 2) 进入my目录 3) 把一个文本文件复制到my目录下同时命名为,该文本文件绝对路径为/user/book/ 4) 把/user/book/移动到my目录下,文件名不变 5) 删除目录my,没有任何提示 答: 1) $mkdir my 2) $cd my 3) $cp /user/book/ 4) $mv /user/book/ 5) $rm -rf my 下安装软件方式有两种:一是安装rpm格式的智能软件包,二是下载源码编译安装,要求安装以下两个软件:和安装,写出所用到的命令 2) 安装,写出解压解包以及标准安装方式所需步骤和命令。

答:(教材82、84、87页) 1) rpm -ivh 参数含义:i表示安装,v表示在安装过程中显示详细的安装信息,h表示显示水平进度条。 2) 源码编译安装方式: ①释放TAR包 使用命令如下:tar zxvf 查看并阅读包内附带的软件安装说明 ③进行编译准备 使用命令如下:./configure ④进行编译 执行make命令 ⑤进行软件安装 执行make install命令 ⑥清楚临时文件 执行make clean命令

VB_Open_文件操作类函数功能详解

VB Open 文件操作类函数功能详解: 1、Open 文件名[For方式] [Access存取类型] [锁定] AS [#]文件号[Len=记录长度] 功能: 为文件的输入输出分配缓冲区,并确定缓冲区所使用的存取方式 说明: (1)打开方式: 指定文件的输入输出方式,可选,默认是Random。可以是以下值: a、Output:指定顺序输出方式,将覆盖原有内容。 b、Input:指定顺序输入方式。 c、Append:指定顺序输出方式,在文件未尾追加内容。 d、Random:指定随机存取方式,也是默认方式,在Random方式时,如果没有Access子句,则在执行Open语句时,VB将按下列顺序打开文件:读/写、只读、只写。 e、Binary:指定二进制文件。在这种方式下,可以用Get和Put语句对文件中任何字节位置的信息进行读写。在Binary方式中,如果没有Access子句,则打开文件的类型与Random方式相同。 (2)存取类型: 放在关键字Access之后,用来指定访问文件的类型。可以是下列类型之一: a、Read:打开只读文件。 b、Write:打开只写文件。 c、Read Write:打开读写文件。这种类型只对随机文件、二进制文件及用Appe nd方式打开的文件有效。 (3)锁定类型: 该子句只在多用户或多进和环境中使用,用来限制其他用户或其他进程对打开进行读写操作。锁定类型包括: a、默认:如不指定锁定类型,则本进程可以多次打开文件进行读写;在文件打开期间,其他进程不能对该文件执行读写操作。 b、Lock Shared:任何机器上的任何进程都可以对该文件进行读写操作。 c、Lock Read:不允许其他进程读该文件。只在没有其他Read存取类型的进程访问该文件时,才允许这种锁定。 d、Lock Write:不允许其他进程写这个文件。只在没有其他Write存取类型的进程访问该文件时,才允许这种锁定。 e、Lock Read Write:不允许其他进程读写这个文件。 如果不使用lock子句,则默认为Lock Read write。 (4)文件号: 由用户自行指定一个由1~511之间的整数,只要该文件号未被使用就合法;打开文件后,可以用该文件号进行读写等操作。

Linux常用文件和目录类命令

常用文件和目录类命令练习linux (1)启动计算机,利用root用户登录到系统,进入字符提示界面。 (2)用pwd命令查看当前所在的目录。 (3)用ls命令列出此目录下的文件和目录。 (4)用-a选项列出此目录下包括隐藏文件在内的所有文件和目录。 (5)用man命令查看ls命令的使用手册。 (6)在当前目录下,创建测试目录test。 (7)利用ls命令列出文件和目录,确认test目录创建成功。 (8)进入test目录,利用pwd查看当前工作目录。 (9)利用touch命令在当前目录创建一个新的空文件newfile。 (10)利用cp命令复制系统文件/etc/profile到当前目录下。 (11)复制文本profile到一个新文件profile.bak,作为备份。 (12)用ll命令以长格式的形式列出当前目录下的所有文件,注意比较每个文件的 长度和创建时间的不同。 (13)用less命令分屏查看profile文件的内容,注意联系less命令的各个子命令, 例如b、p、q等并对“then”关键字查找。 (14)用grep命令在profile文件中对关键字“then”进行查询,并于上面的结果比 较。 (15)给文件profile创建一个软链接lnsprofile和一个硬链接lnhprofile。 (16)长格式显示文件profile、lnsprofile、lnhprofile的详细信息。注意比较3个文 件链接数的不同。 (17)删除文件profile,用长格式显示lnsprofile和lnhprofile的详细信息,比较文 件lnhprofile的链接数的变化。 (18)用less命令查看文件lnsprofile的内容,看看有什么结果。 (19)用less命令查看文件lnhprofile的内容,看看有什么结果。 (20)删除文件lnsprofile,显示当前目录下的文件列表,回到上层目录。 (21)用tar命令把目录打包。 (22)用gzip命令把打好的包进行压缩。 (23)把文件test.tar.gz改名为backup.tar.gz。 (24)显示当前目录下的文件和目录列表,确认重命名成功。 (25)把文件backup.tar.gz移动到test目录下。 (26)显示当前目录下的文件和目录列表,确认移动成功。 (27)进入test目录,显示目录中的文件列表。 (28)把文件test.tar.gz解包。 (29)显示当前目录下的文件和目录列表,复制test目录为testbak目录作为备份。 (30)查找root用户自己的主目录下所有名为newfile的文件。 (31)删除test子目录下的所有文件。 (32)利用rmdir命令删除空子目录test。 (33)回到上层目录,利用rm命令删除目录test和其下所有文件。

Linux系统编程-文件操作

最基本的访问文件方法是:使用read()和write()系统调用。在一个文件能被访问之前,必须通过open() 或者creat()系统调用打开它,一旦使用完毕,则用close()系统调用来关闭文件。 1.open #include #include #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功返回新分配的文件描述符,出错返回-1并设置errno eg: int fd; fd = open("/home/kidd/aaa",O_RDONLY); if(fd == -1) /*error*/ pathname 参数是要打开或创建的文件名,和fopen一样,pathname 既可以是相对路径也可以是绝对路径。 flags参数有一系列常数值可供选择,可以同时选择多个常数用按位或运算符连接起来, 所以这些常数的宏定义都以O_开头,表示or 。 以下三个三先一: O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开 以下可多选(以或的形式)(进行按位或运算,用以修改打开文件请求的行为) O_APPEND 表示追加。如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。 (文件将以追加模式下打开。就是说,在每次写操作之前,文件位置指针将被置于文件末尾,即使 在进程刚刚完成写操作并改变文件位置指针之后,如有另一进程开始写操作,情形也是如此。)O_CREAT 若此文件不存在则由(内核来)创建它。使用此选项时需要提供第三个参数mode,表示该文件的访问权限。 有0666。如果文件已存在,本标志无效,除非给出了O_EXCL标志。 当文件创建时,mode参数提供新建文件的权限。系统并不在该次打开文件时检查权限,所以你可以进行相反的操作,例如设置文件为只读权限,但却在打开文件后进行写操作。最终写入磁盘的权限位还需让mode参数与用户文件创建的掩码(即umask)做按位与操作后来确定。 umask 022,mode 0666,文件权限为0644(0666&~022) O_EXCL 如果同时指定了O_CREAT,并且文件已存在,则出错返回。(用来防止文件创建时出现单键竞争。)O_TRUNC 如果文件已存在且为普通文件,并且以只写或可读可写方式打开,则将其长度截断(Truncate)为0字节。 对于FIFO或者终端设备,该参数被忽略。在其他文件类型上则没有定义。因为截断文件需要写权限,所以O_TRUNC和O_RDONLY同时使用也是没有定义的。 eg: int fd; fd = open("/home/teach/pearl", O_WRONLY|O_TRUNC); if(fd == -1) /*error*/ O_NONBLOCK 对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O (Nonblock I/O )。

相关文档
最新文档