linux用啥标识,描述和控制文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux用啥标识,描述和控制文件相关的知识,希望对你有一定的参考价值。
Linux的文件标识符,和Windows的就是文件名不同,它相当于文件的一个指针。在linux的C语言中,除了用通用的《【C】文件读写问题》(点击打开链)中介绍过的fopen等c语言通用操作文件以外,其Linux应用请参考《【Linux】利用C语言文件流复制单一文件),还能用文件标识符还来操作文件。这也是Linux中C语言,最底层,最原始控制文件的方式,其函数open,read,write,close已经完美地表明这一点。同时,在Linux无论是文件、设备和管道,甚至是个可操作对象对可以视作文件来对待,具体表现为都可以用这个文件标识符来操作他们。文件标识符非常独特,并不是指针,其变量类型就是大家非常常用的int。
至于这个东西怎么用,具体请看如下文件读写程序:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>//文件控制
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 512//缓冲区的大小
const char* FILEPATH="/tmp/file.txt";//文件目录
int main(void)
int fd;//文件标识符,
char *s = "被折腾的文字";
char buffer[MAXSIZE+1];//用来接字符的缓冲区
int size;//读入的文件长度
if((fd=open(FILEPATH,O_CREAT|O_TRUNC|O_RDWR,0777))<0)
//O_CREAT如果指定文件不存在,则创建这个文件,O_EXCL如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
//O_APPEND每次写操作都写入文件的末尾,O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
//O_RDONLY只读模式,O_WRONLY只写模式,O_RDWR读写模式
//0777为最高权限
perror("打开文件失败!");
exit(1);
if((write(fd,s,strlen(s)))<0)
perror("写入文件失败!");
exit(1);
//lseek(fd,0,SEEK_SET);//即把文件指针移至buf文件的开始处
lseek(fd,-strlen(s),SEEK_END);//即把文件指针往从结尾处向前移动strlen(s)个字符
if((size=read(fd,buffer,MAXSIZE))<0)
perror("读入文件失败!");
exit(1);
else
buffer[size]='\0';//字符串数组封口
printf("%s\n",buffer);
if(close(fd)<0)
perror("关键文件失败!");
exit(1);
unlink(FILEPATH);//删除文件
exit(0);
这个程序的一大堆头文件,是没办法的,因为所用到的函数需要的基本头文件就是这么多,但这些头文件都是Linux的基本头文件,能够拿来直接用。
程序首先打开并同时利用open的参数创建一个文件,之后向这个文件,通过read函数写入一个名为“缓冲区”buffer的字符数组,也就是字符串string的一些东西,然后,写入完毕,因为文件操作光标将会移到文件最后,所以我们要先将其移回文件头,再利用write函数读入这个文件的内容到buffer,并打印到屏幕,最后再用close关闭文件标识符与文件的连接,并利用unlink删除这个文件,如果没有close,unlink将不起作用,因为这个程序正在占用这个/tmp/file.txt,无法删除,如果要强制删除可以考虑remove函数。
所以,上述代码的运行结果如下图:
最后,这个文件自然是要被删除的了,肯定是没有的:
上述程序很简单,但我们更多应该关注这里文件标识符的作用。fd这个int就是文件标识符,相当于FILE *的作用,但他就是一个int。实质上,这个int非常独特,同open函数,int fd里面存着要被操作文件的地址,但它却又不是int *,之后的write和read函数都要根据这个fd所指明的方向来,你可以发现write,read参数都有一个地方,填入了fd,可要求填入的,却是一个int变量,这在windows里面是没有的,同时不了解文件标识符的人,看到write和read的使用可能是云里雾里的,之后的close就更不用说了,就是清楚这个fd与被操作文件的关联关系。
unlink函数则和文件标识符无关,需要一个文件路径的参数。 参考技术A
在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话。
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。部分图片和描述选自于linuxprobe.com/linux-file-descriptor.html,非常感谢原文作者的经验分享。
标准文件描述符图如下:
文件描述与打开的文件对应模型如下图:
Linux文档怎么加密,用啥办法好
合力天下LINUX防泄密系统概述Linux具有天生秉承的优势,越来越多的企业转向了Linux的开发和应用。使用Linux操作系统的单位多数都拥有自主知识产权,如果有丝毫的泄露,都会造成巨大的损失。 基于多年的数据防泄漏防护经验,北京合力天下数码信息技术有限公司自主研发了一套运行在Linux平台环境下,防止Linux系统中自主知识产权泄密的产品。该系统在不改变用户使用习惯、计算机文件格式和编译程序的情况下,对指定类型的代码文件进行实时、透明的加解密。所有通过非法途径获得的数据,都将以乱码文件形式表现。
合力天下LINUX防泄密系统是一款功能强大且易于使用的LINUX文档加密软件产品,该系统采用“驱动层AES智能透明加密技术”对指定类型的文件进行实时、强制、透明的加解密。在正常使用时,计算机内存中的文件是以受保护的明文形式存放,但硬盘上保存的数据却处于加密状态,如果没有合法的使用身份、访问权限和正确的安全通道,所有加密文件都将以密文状态保存。
合力天下LINUX防泄密系统稳定可靠,并且具备良好的可扩展性,能同时满足企业其它应用系统文档加密需求,有效防止数据丢失或泄露,有助于更深入、更全面地实施数据保护,从而确保企业机密数据的高度安全。
合力天下LINUX防泄密系统产品架构
合力天下LINUX防泄密系统采用控制台/服务器/代理(B/S/C)体系:服务器(Server)、客户端代理(Agent)和控制台(Management Console)三部分组成。
M/S/A三部分相互协调工作:管理员通过控制台的WEB浏览器制订灵活的安全策略;安全策略被保存在服务器上;终端计算机上安装的代理主动连接服务器;接收到网络连接后,服务器把制订好的策略下发到该终端计算机;终端计算机代理的安全引擎执行安全策略,进行安全控制。
合力天下LINUX防泄密系统部署模式
合力天下LINUX防泄密系统功能特点
一 驱动层透明加密
针对研发单位,可对JAVA、C、C++ 等各种源代码文件进行透明加密保护;
针对手机、电子书等版权单位,可针对任何需要保护其版权的文档类型进行透明加密保护;
针对办公环境,可对任何文件类型加密。
二 编译加密源代码
针对研发单位,加密的源代码文档无需解密为明文,可直接通过编译进程进行编译。
编译后的Image文件是明文,便于产品的测试与分发。
三 网络通信安全隧道
加密文档(如源代码)需要通过文档版本管理软件(如CVS\SVN\GIT)通过网络或文件系统进行集中备份与共享。加密文件系统提供网络安全隧道功能,保护网络通信中的加密文件。
如加密文件需要保存到服务器上,既可以密文存储到服务器上也可以明文存储到服务器上。
如明文存储到服务器上,加密系统的网络安全隧道可与合力天下LINUX防泄密系统服务器数据保护网关联动,实现加密文档在上传到服务器网关自动解密,下载文件时网关自动加密。如此既保障了文档的可靠性、可用性,又保障文档的安全性。
四 进程合法性验证
对进程进行签名认证,验证通过的进程,才是合法进程,才能对加密文件行读写操作。
任何伪造进程的方式都无法读写加密文档。如更改进程名称、SVN多种协议读写加密文件等都无法解密文件。
五 自身安全强保护
系统具有自我保护能力,在自身受到破坏不完整时整个系统依然能够保障数据的安全性。
粘贴/拷贝控制
系统具有防粘贴拷贝能力,不可信进程可以拷贝任何数据到可信进程;但可信进程不允许拷贝数据到任何其它进程,有效防止数据的泄露。
六 文件批量加密
可对明文文件批量加密,针对开源的文件很方便的合并到工程里面。
批量加密流程具有保护机制,防止已经加密的文件再次加密,造成文件的损坏。
七 可离线工作
离线即客户端网络连接不上加密服务器所处的状态,如外出办公等。
加密系统支持离线办公,离线的安全策略为最近一次在线时的文件加密策略。
八 与Windows加密系统兼容
Linux加密系统与Windows加密系统相互兼容:Windows加密的文件在Linux下能够操作,在Linux加密的文件在Windows下能够操作。
合力天下linux防泄密系统加密规则
1.不可信进程规则
不可信进程创建、编辑的文件都是明文文件。
不可信进程读取的加密文件是乱码,不可以使用。
2.可信进程规则
可信进程创建符合加密规则的文件是加密的文件。
可信进程可以透明读写编辑加密文件。
原不加密但符合加密规则文件,一但可信进程进行了编辑,则原文件成为加密文件。
可信进程在未创建、读写加密文件前,创建不符合加密规则的文件是明文的。
可信进程在未创建、读写加密文件前,可以任意编辑明文文件,该文件不被加密。
可信进程一旦创建、编辑了加密文件,则后续创建、编辑的所有文件都是加密的。
3.进程间拷贝粘贴规则
可以自由的从不可信进程中粘贴拷贝文字到可信进程。
可以自由的从不可信进程中粘贴拷贝文字到不可信进程。
可信进程的文字拷贝受到安全保护,禁止随意拷贝文字。
4.编译器进程规则
编译器创建的二进制文件是明文的,可以随意烧到嵌入式设备中。
5.离线加密规则
支持离线文档加密。
离线规则为最近一次上线的文档加密规则。
6.文件批量加密
支持文件批量代码加密转化。 参考技术A 用openssl加密文件
openssl也可以进行文件的加密。方法比上面的gpg简单很多,没有创建密钥的过程,也没有相关的配置文件,只要执行一条命令就可以对文件进行加密。
把加密的文件传给需要的人后,只要他知道加密方式和加密口令,就可以解密查看文件。
openssl支持的加密算法很多,包括:bf,cast,des,des3,idea,rc2,rc5等及以上各种的变体,具体可参阅相关文档。
具体的方法如下:
1.加密一个文件:
[root@fxvsystem root]# openssl enc -des -e -a -in install.log -out install.log.des
enter des-cbc encryption password:
Verifying – enter des-cbc encryption password:
输入密码之后,就会生成install.log.des文件,这个文件名是自己指定的,可以随意写。
以上是关于linux用啥标识,描述和控制文件的主要内容,如果未能解决你的问题,请参考以下文章
在Linux中,用啥命令查看文件或目录的权限?权限共有几个字段组成?有哪几种权