Linux命令【五】系统函数

系统文件函数

stat函数

指针如果没有const一般表示传出参数,如果加const表示传入参数
struct stat

  • dev_t st_dev文件设备编号
  • ino_t st_ino节点
    inode号是唯一的,每个inode节点的大小一般是128字节活着256字节,一般文件每2KB就设置一个inode
  • mode_t st_mode文件类型和存取权限,16bite,4bite文件类型 4bit特殊权限位 3*4bit访问权限
  • nlink_t st_nlink文件的硬链接数目
  • uid_t st_uid用户ID
  • gid_t st_gid组ID
  • dev_t st_rdev若文件为设备文件,则为其设备编号
  • off_t st_size文件字节数
  • blksize_t st_blksize块大小(文件系统的I/O缓冲区大小)
  • blkcnt_t st_blocks快数
  • time_t st_atime最后一次访问时间
  • time_t st_mtime最后一次修改时间
  • time_t st_ctime最后一次改变时间:指属性,包括访问,修改内容,修改类型等

stat函数和lstat函数的区别:对于软链接,前者是穿透(追踪)函数,后者是不穿透(不追踪)函数

access测试文件是否有某种权限

chmod 改变文件权限

可以使用第3章strtol函数将字符串转化为数字

chown 改变文件所有者

可以查看passwd文件(详见手册第5章)

truncate函数

文件的截取和拓展

#include <unistd.h>
#include <sys/types.h>int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

多出来的方式仍然是以空洞的方式储存

link函数

创建硬链接

#include <unistd.h>int link(const char *oldpath, const char *newpath);#include <fcntl.h>           /* Definition of AT_* constants */
#include <unistd.h>int linkat(int olddirfd, const char *oldpath,int newdirfd, const char *newpath, int flags);

symlink 函数

创建软链接

readlink 函数

读一个软链接

unlink 函数

如果是软链接,则删除软链接
如果是硬链接,则删除当前硬链接,硬链接数减一,当减为0时,释放数据块和inode
使用unlink可以制作临时文件:如果文件硬链接数为0,但有进程已经打开文件,并且持有文件描述符,则等该进程关闭文件时kernel才真正删除文件,因此可以先open|creat一个文件,然后再使用文件描述符操作该文件,同时使用unlink函数删去,则创造出了一个临时文件

每一次unlink其实是删除一个目录项(denty),当所有占用该文件的进程使用结束或者进程关闭文件才会失效

操作文件的时候需要注意文件指针,尤其是写操作以后想要读取的时候

rename函数

目录操作函数

chdir函数

相当于cd命令,改变的是所在进程的路径,而不是终端的路径

getcwd函数

相当于pwd命令,获取进程当前目录

mkdir函数

需要注意创建的目录需要有执行权限,否则无法进入目录

rmdir函数

删除一个空目录

opendir函数(下面开始变成手册第三章的函数了)

成功返回一个DIR指针,失败返回NULL

readdir函数

读取目录内容,返回一个结构体struct dirent

  • ino_t ino目录的inode
  • ff_t d_off目录文件开头到此目录进入点的位移
  • signed short int d_reclend_name的长度
  • unsigned char d_type 文件的类型

closedir函数

dup 和dup2

查阅手册第二章
用于复制文件描述符,可以让多个文件描述符指向同一个文件

dup(old fd)函数:返回一个文件描述符,指向旧文件描述符所指向的文件,返回的是所有未占用的文件描述符中最小的一个
dup2(old fd,new fd)函数:指向新的文件描述符,如果新文件描述符原本指向一个文件则将该文件释放,再指向旧文件描述符所指向的文件。如果new和old是同一个文件描述符则不会关闭。

虽然可能有多个文件描述符,但是只有一个文件指针

这里的文件覆盖并不是清空,而是在原来文件上面写

fcntl函数

改变已经打开的文件的属性

  • 复制一个现有的文件描述符
  • 获得/设置文件描述符标记
  • 获得/设置文件状态标记
int fcntl(int fd,,int cmd,long arg)

cmd=F_GETFLarg=0就可以,返回文件的状态flag=fcntl(fd,F_GETFL,0)
cmd=F_SETFLarg=flag|O_APPEND/O_NONBLOCK
O_APPEND在末尾追加

  • 获得/设置异步I/O所有权
  • 获得/设置记录锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生产者-消费者模型的两种实现方式

https://www.cnblogs.com/caolicangzhu/p/7086176.html本文主要来总结生产者-消费者模型的代码实现,至于其原理,请大家自行百度. 一、基于链表的生产-消费模型(条件变量)我们以链表为例,生产者进行头部插入,消费者进行头部删除,因此,先将链表相关操作封装为LinkList.h,具体代码…

Linux系统【一】CPU+MMU+fork函数创建进程

切板中的内容输出到文件### 进程相关概念 程序&#xff1a;编译好的二进制文件&#xff0c;在磁盘上&#xff0c;不占用系统资源&#xff08;不包括磁盘&#xff09;。&#xff08;剧本&#xff09; 进程&#xff1a;占用系统资源&#xff0c;是程序的一次运行。&#xff08;戏…

Ubuntu卸载软件

用过使用dpkg软件管理工具得到所有已经安装的软件&#xff0c;如果不清楚软件的全名可以使用grep命令进行查找 然后再使用sudo apt-get remove --purge 软件名卸载软件&#xff08;--purge参数会删除配置文件&#xff0c;删的干净一些&#xff09; 例如&#xff1a;

一个重要且实用的signal---SIGCHLD

https://blog.csdn.net/lyztyycode/article/details/78150805SIGCHLD(修改)因为笔者之前的文章里面有错误&#xff0c;今天发现&#xff0c;立马做个修改。在下面我的一段关于sigchld信号相对于直接调用wait函数的好处时&#xff0c;我说调用wait函数要一直检测子进程是否执行完…

数据结构实验之链表七:单链表中重复元素的删除

https://blog.csdn.net/blessingxry/article/details/794455111.知识点&#xff1a;逆序建立链表&#xff0b;节点删除 2.题意&#xff1a;按照数据输入的相反顺序&#xff08;逆位序&#xff09;建立一个单链表&#xff0c;并将单链表中重复的元素删除&#xff08;值相同的元素…

Python3函数和代码复用

函数的定义 def 函数名([参数列表]):注释函数体注意事项 函数形参不需要声明类型&#xff0c;可以使用return语句在结束函数执行的同时返回任意类型的值&#xff0c;函数返回值类型与return语句返回表达式i的类型一致 即使该函数不需要接受任何参数&#xff0c;也必须保留一堆…

一文说尽C++赋值运算符重载函数(operator=)

http://www.cnblogs.com/zpcdbky/p/5027481.html在前面&#xff1a;关于C的赋值运算符重载函数(operator)&#xff0c;网络以及各种教材上都有很多介绍&#xff0c;但可惜的是&#xff0c;内容大多雷同且不全面。面对这一局面&#xff0c;在下在整合各种资源及融入个人理解的基…

Python a和a[:]的区别

简单来讲a[:]是深复制&#xff0c;a是浅复制&#xff0c;相当于赋值a的话是赋值了指针&#xff0c;赋值a[:]相当于复制了a对应的那段空间 例如&#xff1a; a [1,1,1,1,1,1]for x in a:if x1:a.remove(x)print(a)运行结果&#xff1a; remove操作是移除序列中第一个x元素。…

约瑟夫环(c语言程序完整版)

https://blog.csdn.net/m_hahahaha1994/article/details/51742453约瑟夫环&#xff08;约瑟夫问题&#xff09;是一个数学的应用问题&#xff1a;已知n个人&#xff08;以编号1&#xff0c;2&#xff0c;3…n分别表示&#xff09;围坐在一张圆桌周围。从编号为k的人开始报数&am…

Linux系统【二】exec族函数及应用

文件描述符 文件描述符表是一个指针数组&#xff0c;文件描述符是一个整数。 文件描述符表对应的指针是一个结构体&#xff0c;名字为file_struct&#xff0c;里面保存的是已经打开文件的信息 需要注意的是父子进程之间读时共享&#xff0c;写时复制的原则是针对物理地址而言…

白话C++系列(27) -- RTTI:运行时类型识别

http://www.cnblogs.com/kkdd-2013/p/5601783.htmlRTTI—运行时类型识别 RTTI&#xff1a;Run-Time Type Identification。 那么RTTI如何来体现呢&#xff1f;这就要涉及到typeid和dynamic_cast这两个知识点了。为了更好的去理解&#xff0c;那么我们就通过一个例子来说明。这个…

使用头文件的原因和规范

原因 通过头文件来调用库功能。在很多场合&#xff0c;源代码不便&#xff08;或不准&#xff09;向用户公布&#xff0c;只 要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库 功能&#xff0c;而不必关心接口怎么实现的。编译器会从库中提取相应…

转圈踢人问题

https://www.cnblogs.com/lanxuezaipiao/p/3339603.html 有N个人围一圈依次报数&#xff0c;数到3的倍数的人出列&#xff0c;问当只剩一个人时他原来的位子在哪里&#xff1f; 解答&#xff1a;经典的转圈踢人问题&#xff0c;好吧专业一点&#xff0c;约瑟夫环问题&#xff0…

Linux系统【三】回收子进程

孤儿进程 父进程先于子进程结束&#xff0c;则子进程成为孤儿进程&#xff0c;子进程的父进程成为init进程&#xff0c;则称init进程领养孤儿进程。现在好像是用户进程中的system进程。 僵尸进程 进程终止&#xff0c;父进程不进行回收&#xff0c;自己成残留资源(PCB)存放在…

string类的基本实现

https://blog.csdn.net/qq_29503203/article/details/52265829在面试中面试官常常会让你写出string类的基本操作&#xff0c;比如&#xff1a;构造函数&#xff0c;析构函数&#xff0c;拷贝构造等等.下面是除此之外的一些操作&#xff0c;希望可以帮助你更好的理解string以便以…

Python3常用数据结构

Python3中有三种组合数据类型&#xff0c;分别为&#xff1a; 序列类型&#xff1a;字符串&#xff08;str&#xff09;、元组&#xff08;tuple&#xff09;、列表&#xff08;list&#xff09;集合类型&#xff1a;集合&#xff08;set&#xff09;映射类型&#xff1a;字典…

Linux C++ 回射服务器

http://blog.csdn.net/qq_25425023/article/details/53914820回射服务器就是服务端将客户端的数据发送回去。我实现的回射服务器返回增加了时间。服务端代码&#xff0c;可以很容易看懂&#xff1a;[cpp] view plaincopy#include <sys/socket.h> #include <stdio.h&g…

TCP第四次挥手为什么要等待2MSL

当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候)&#xff0c;必须经过时间计数器设置的时间2MSL(最长报文段寿命)后&#xff0c;才能进入关闭状态&#xff0c;这时为什么呢&#xff1f;&#xff1f;&#xff1f; 这最主要是因为两个理由&#xff1a; 1、为了保证客户…

计算机网络【一】概述+OSI参考模型

网络概述 局域网:覆盖范围小(100m以内)&#xff0c;自己花钱买设备&#xff0c;带宽固定(10M,100M,1000M)&#xff0c;自己维护&#xff08;接入层交换机直接连接电脑、汇聚层交换机直接连接接入层交换机&#xff09; 广域网:距离远&#xff0c;花钱买服务&#xff0c;租带宽&…

单链表逆序的多种方式

https://www.cnblogs.com/eniac12/p/4860642.htmltemplate<class T> void List<T>::Inverse() {if(first NULL) return;LinkNode<T> *p, *prev, *latter; p first->link;   // 当前结点prev NULL;   // 前一结点l…