有关其他可能的oflags 值,请参阅打开手册的调用。
模式:
当使用带O_CREAT 标志的open 来创建文件时,必须使用open 调用的三参数形式。第三个参数模式是通过按位或运算几个标志获得的。他们是:
S_IRUSR: 读取权限,文件所有者。 S_IWUSR: 写权限,文件所有者。 S_IXUSR: 执行权限,文件所有者。 S_IRGRP: 读权限,文件所属组。 S_IWGRP: 写权限,文件所属组。
请参阅下面的示例。
打开(“我的文件”,O_CREAT,S_IRUSR | S_IXOTH;
它的功能是创建一个名为myfile.txt 的文件。文件的所有者有读取权限;其他用户只有执行权限。
运行结果:
该程序创建一个名为myfile.txt 的文件。文件的所有者有读取权限;其他用户只有执行权限。
关闭系统调用
close 系统调用用于“关闭”文件,结束文件描述符fildes 和文件之间的关联。文件描述符被释放并且可以被重用。
close 成功时返回1,错误时返回-1。
#includeunistd.h
int 关闭(int fildes);
ioctl系统调用
Ioctl 控制设备及其描述符的行为,并提供用于配置底层服务的接口。终端、文件描述符、甚至磁带驱动器都可以定义,尤其是ioctl。
详情请参阅各设备的使用说明书。
下面是ioctl的函数原型。
#includeunistd.h
int ioctl(int fildes, int cmd,);
ioctl 对描述符fildes 指定的对象执行cmd 参数指定的操作。
其他与文件管理相关的系统调用
还有许多其他操作文件的系统调用。
lseek() 为文件描述符fildes 指定的文件设置读写指针。即可以设置文件的下一个读写位置。
fstat、stat、lstat是与文件描述符相关的函数操作,这里不再介绍。
dup、dup2 系统调用。 dup 提供了一种复制文件描述符的方法,允许通过两个或多个不同的文件描述符来访问同一个文件。这可以用于
在文件内的不同位置读取和写入数据。
库函数
直接使用系统调用进行输入/输出操作效率非常低。具体原因有两个。
1.系统调用影响系统性能。与函数调用相比,系统调用的成本较高。这是因为当你执行系统调用时,你必须切换到内核代码区,执行它,然后返回到你的用户代码。这必然要消耗大量的时间。一种解决方案是尽量减少系统调用的数量,并允许每个系统调用完成尽可能多的任务。例如,每个系统调用都会写入许多字符而不是一个字符。 2. 硬件对单个系统调用中可以读取或写入的数据块施加了一定的限制。例如,磁带驱动器的典型写入操作的数据块长度为10k。即使截断的数据不是10k 的整数倍,磁带机也会以10k 为增量卷绕磁带,并在磁带上留下间隙。
为了提高文件访问操作的效率,使文件操作更加方便,Linux发行版提供了一套标准函数库。这些是您可以在自己的程序中方便地使用的函数集合。
转到文件。标准I/O 库就是一个例子,它提供输出缓冲功能。可以高效地写入任意长度的数据块,并且库函数根据需要安排低级函数调用(系统调用)。
换句话说,库功能在用户和系统之间添加了一个中间层。如下所示:
库函数是根据您的需要封装的系统调用,可以让您在程序中方便地使用库函数,例如标准IO库(如下所述)。
标准I/O库
标准I/O 库及其头文件stdio.h 为低级I/O 系统调用提供了通用接口。尽管该库现在是ANSI 标准C 的一部分,但上面列出的系统调用不是。
标准I/O库提供了许多复杂的函数用于格式化输出和扫描输入,同时还负责满足设备的缓冲要求。
在许多方面,使用标准I/O 库与使用低级文件描述符类似。必须首先打开文件并建立文件访问路径(即系统调用内的文件描述符)。
在标准I/O库中,相应的文件描述符称为流,并被实现为指向结构体FILE的指针。
当您启动程序时,会自动打开三个文件流。他们是:
stdin: 标准输入stdout: 标准输出stderr: 标准错误输出
以下是一些常用的I/O 库函数。
fopen 函数
fopen 函数与系统调用open 函数类似。与open 一样,它返回文件的标识符,但这里称为流,并在库函数中实现为指向文件的指针。
当您需要显式控制设备行为时,建议使用低级系统调用,因为它们可以避免使用库函数(例如输入/输出缓冲)带来的意外副作用。
函数原型:
#includestdio.h
FILE *fopen(const char *文件名, const char *模式);
参数说明:
*filename:打开文件的文件名
*mode:开启方式
r 以只读方式打开文件。文件必须存在。
r+ 打开一个文件进行读写。文件必须存在。
rb+ 打开二进制文件进行读写,允许您读取数据。
rw+读写打开一个文本文件,允许读写。
w 打开一个只写文件。如果文件存在,则文件长度清0。也就是说,文件的内容将被删除。如果文件不存在则创建该文件
w+ 打开一个可读写的文件。如果文件存在,则文件长度清零。也就是说,文件的内容将被删除。如果文件不存在则创建该文件。
fopen 成功时返回一个非空FILE * 指针。失败时返回NULL
fread/fwrite 函数
fread函数从文件流中读取数据,对应于read系统调用,fwrite函数从文件流中写入数据,对应于write系统调用。
函数原型:
#includestdio.h
size_t fread(void *ptr, size_t size, size_t niitems, FILE *stream);
参数说明:
*ptr 从中读取数据的缓冲区,即存储读取数据的位置。
size:指定每条数据记录的长度。
nitems:指示传输的记录数的计数。
返回值: 从数据缓冲区中成功读取的记录数。当到达文件末尾时,返回值可能会消耗niitems,或0。
size_t fwrite(const coid *ptr, size_t size, size_t nitimes, FILE *stream);
将指定数据缓冲区ptr 中的数据写入文件流并返回成功写入的记录数。
fclose 函数
fclose函数关闭指定的文件流stream。此操作写出所有未写入的数据。调用fclose 函数非常重要,因为stdio 库函数会缓冲数据。
如果您的程序需要确保所有数据都已写出,则应调用fclose 函数。程序正常终止时会自动调用fclose函数,但无法检测到调用fclose函数引起的错误。
函数原型为:
#includestdio,h
int fclose(FILE *流);
闪光功能
fflush函数的作用是写出文件流中所有未写入的数据。 出于效率考虑,使用库函数时会使用数据缓冲区,只有缓冲区满时才进行写操作。使用fflush函数
您可以写出缓冲区中的所有数据,无论缓冲区是否已满。不需要在fclose 之前调用fflush,因为fclose 隐式调用fflush 函数。
函数原型:
#includestdio.h
int fflush(FILE *流);
/proc 文件系统
Linux将一切都视为文件,每个硬件设备在文件系统中都有相应的条目。 /dev 目录中的文件以特殊方式使用低级系统调用来访问硬件。
/proc 文件系统可以被认为是一个特殊的文件系统,其中每个文件对应一个单独的硬件,用户通过proc 文件系统访问硬件设备的方式与访问文件的方式相同。
该文件系统通常显示为/proc 目录。该目录包含许多特殊文件,允许对驱动程序和内核信息进行高级访问。
如果你想了解CPU信息和内核版本信息等信息,可以使用proc文件系统。
/proc 目录中的文件根据您的系统而有所不同。我的计算机上/proc 中的文件如下所示:
大多数情况下,您可以通过直接读取这些文件来获取状态信息。
访问设备信息
例如获取CPU信息。
内存使用信息(部分显示~):
每次读取这些文件的内容时,它们提供的信息都会实时更新。所以如果你再次读取meminfo文件你会得到不同的结果。
特定内核函数提供的详细信息可以在proc 目录的子目录中找到。
显示内核函数提供的信息
示例:显示网络套接字使用统计信息。
通过proc显示进程信息
使用ps 命令获取当前正在运行的进程。每个进程在proc中都有一个对应的信息文件。通过查看该文件可以查看进程相关信息。
进程2754的当前工作目录是/hme/yyl。
程序/bin/su 正在运行,以及此处未描述的其他信息。
修改proc文件系统的内容
例如,系统上运行的所有程序同时打开的文件总数就是Linux 内核参数。
如果你想增加这首歌的价值,可以通过将其写入同一个文件来实现。
注意:写入proc时要注意权限问题,更改不合适的值可能会影响系统运行。
本文原文地址:http://www.linuxprobe.com/linux-command.html
我们努力为开源技术爱好者做得更好,免费提供最新的Linux技术教程书籍:http://www.linuxprobe.com/thread
我们专门整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以毫无惊慌地参加面试并获得高薪offer。
这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。
本次访谈集内容为
174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx面试题题77 redis面试题Zookeeper题28
总共1000多道面试题,内容全面且有价值。
174道运维工程师面试题
1.什么是运维?
2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?
3. 您目前有300台服务器,您如何管理它们?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5、LVS、Nginx、HAproxy有什么区别?
6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?
7.Tomcat和Resin有什么区别?
8.什么是中间件?
9、Tomcat中的8005、8009、8080这三个端口是什么意思?
10.什么是CDN?
11.什么是网站灰度发布?
12、请简单说明一下DNS域名解析的过程。
13.什么是RabbitMQ?
14.Keepalived如何工作?
15.描述LVS工作流程的三种模式。
16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?
我给了你300台服务器,你如何管理它们?
4. 简要说明RAID0和Raid1raid5这两种工作模式的工作原理和特点。
5、LVS、Nginx、HAproxy有什么区别?
6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?
7.Tomcat和Resin有什么区别?
8.什么是中间件?
9、Tomcat中的8005、8009、8080这三个端口是什么意思?
10.什么是CDN?
11.什么是网站灰度发布?
12、请简单说明一下DNS域名解析的过程。
13.什么是RabbitMQ?
14.Keepalived如何工作?
15.描述LVS工作流程的三种模式。
16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?
17.如何重置mysql root密码?
#Linux _size_t 写入相关内容以上在源码网络中需要了解的命令操作仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92055.html