Linux系统常用命令(5)

1. read、write函数读写文件

例:将一个文件中的内容写到另外一个文件中。

Linux系统常用命令(5)_第1张图片

Linux系统常用命令(5)_第2张图片

Linux系统常用命令(5)_第3张图片

执行结果:

说明已经成功将一个文件中的内容写到另外一个文件中。

2. lseek函数

off_t实际上是整型,fd是文件描述符,offset是读写位置的偏移量,whence是位置,它分为三种:SEEK_SET、SEEK_CUR、SEEK_END。

(1)获取文件大小

Linux系统常用命令(5)_第4张图片

(2)文件的拓展

例:从文件结尾向后拓展2000个字节。

Linux系统常用命令(5)_第5张图片

执行结果:

Linux系统常用命令(5)_第6张图片

最后发现文件大小是2015个字节,因为最后的写操作向里面写入了一个字节。

将拓展之后的文件称为空洞文件。

3. stat函数

(1)stat命令:查看文件的详细信息

Linux系统常用命令(5)_第7张图片

(2)stat函数:

其中path是传入参数,传入的是文件的路径。buf是传出参数。buf是一个结构体指针,函数stat会把数据写到已经准备好的buf指向的结构体中,所以buf是传出参数。stat函数的返回值:如果是0说明成功,如果返回-1说明出错了。

Linux系统常用命令(5)_第8张图片

其中st_mode是16位的变量:

Linux系统常用命令(5)_第9张图片

用st_mode“与”上相应的掩码就得到了相应的结果。比如st_mode & S_IRWXO,得到的就是代表其他人权限的那3位。

Linux系统常用命令(5)_第10张图片

Linux系统常用命令(5)_第11张图片

4. stat和lstat

(1)例:stat函数应用:将文件的大小输出出来。

Linux系统常用命令(5)_第12张图片

执行结果:

注:命令行参数中argv[0]是当前可执行文件的名字,所以我们要将argv[1]传入stat函数。

如果传入的参数是该文件的一个软链接,那么stat函数仍然会去追踪该文件,所以输出的是该文件的大小,而不是软链接文件的大小:

(2)lstat函数

如果把程序中的stat函数换成lstat函数,那么上面的两个实验会分别输出以下结果:

Linux系统常用命令(5)_第13张图片

可以看到如果传入的参数是该文件的一个软链接,那么lstat函数不会去追踪该文件,所以输出的是软链接文件的大小。

Linux系统常用命令(5)_第14张图片

此外,这几个命令也分为追踪和不追踪:

Linux系统常用命令(5)_第15张图片

5. chmod函数

Linux系统常用命令(5)_第16张图片

6. chown函数

Linux系统常用命令(5)_第17张图片

7. truncate函数

truncate函数:文件的拓展

Linux系统常用命令(5)_第18张图片

8. link函数、symlink函数、readlink函数

Linux系统常用命令(5)_第19张图片

9. unlink创建临时文件

(1)unlink函数作用:删除一个文件的目录项并减少它的链接数,若成功返回0,否则返回-1。如果想通过调用这个函数来成功删除文件,就必须拥有这个文件的所属目录的写和执行权限。

(2)unlink函数使用:

         1)如果是符号链接,则删除符号链接

         2)如果是硬链接,硬链接数减1,当减为0时,释放数据块和inode。

         3)如果文件硬链接数为0,但有进程已打开该文件,并持有文件描述符,则等该进程关闭该文件时,kernel才真正去删除该文件。(利用该特性创建临时文件,先open,然后调用unlink并不会真正删除,接下来还可以对该文件进行读写操作,最后当close文件后,该文件才会真正被删除。)

例:

Linux系统常用命令(5)_第20张图片

Linux系统常用命令(5)_第21张图片

注:

(1)在执行write(fd, "hello\n", 6);后,文件指针已经不在文件的起始位置了,所以我们要重置文件指针,然后才能从文件中读数据。重置文件指针的函数为:

(2)将读出的内容写到屏幕上,文件描述符为1(标准输出)。

10. 目录操作函数

(1)chdir函数、getcwd函数

Linux系统常用命令(5)_第22张图片

例:

Linux系统常用命令(5)_第23张图片

Linux系统常用命令(5)_第24张图片

在进程中修改当前进程的路径到上一级目录,并在上一级目录创建一个文件chdir.txt,然后将当前进程的工作目录打印出来。注:shell的工作目录并没有改变。

执行结果:

Linux系统常用命令(5)_第25张图片

(2)mkdir函数

(3)rmdir函数

(4)opendir函数

(5)readdir函数

Linux系统常用命令(5)_第26张图片

例:递归读目录获取文件个数

getFileNum函数传入的是目录所在路径,返回的是该目录中的普通文件个数。readdir函数如果返回不为NULL,说明该目录中有目录或者文件,那么进入while循环,while循环会自动地遍历该目录中的文件或目录;否则如果readdir函数返回NULL,说明该目录为空目录,那么就不进入while循环了。while循环退出后,total保存的就是该目录中的普通文件个数。关闭目录,然后返回total。

Linux系统常用命令(5)_第27张图片

Linux系统常用命令(5)_第28张图片

Linux系统常用命令(5)_第29张图片

      

Linux系统常用命令(5)_第30张图片

执行结果:

Linux系统常用命令(5)_第31张图片

11. dup和dup2

(1)dup函数返回的是文件描述符表中没有被占用的最小的文件描述符。

Linux系统常用命令(5)_第32张图片

比如dup(3),该函数会返回4,因为4是文件描述符表中没有被占用的最小的文件描述符。然后3和4就都是指向该文件的文件描述符了。

(2)dup2(old, new)   如果old和new不同,那么函数返回后,old和new就都是指向old指向文件的文件描述符,并且如果new之前指向打开的文件的话,会先关闭该文件。如果old和new相同的话,该函数无实际操作,直接返回old。

注:当关闭文件时,要用close函数将指向该文件的两个文件描述符都关掉。

12. fcntl函数

函数原型:

Linux系统常用命令(5)_第33张图片

当cmd参数是F_GETFL时,我们将arg设为0,那么函数的返回值是上图中F_GETFL右侧的7种之一,表示当前文件的状态。

当cmd参数是F_SETFL时,我们将arg设置为O_开头的宏,那么该文件会设置为相应的状态。

函数的返回值如果为-1代表失败。

例:

Linux系统常用命令(5)_第34张图片

Linux系统常用命令(5)_第35张图片

Linux系统常用命令(5)_第36张图片

执行结果:

Linux系统常用命令(5)_第37张图片

Linux系统常用命令(5)_第38张图片

可以发现字符串p是从文件的头部开始写,并覆盖原来的内容。将文件状态修改之后,再次输入新内容q,可以发现该内容会追加到旧内容的后面。

 

你可能感兴趣的:(Linux系统命令)