当前位置:  技术问答>linux和unix

linux/mac 如何通过c函数禁止用户重命名 ?

    来源: 互联网  发布时间:2017-05-14

    本文导语:  是这样的,我开始的时候制定一个文件名,例如:test.txt 然后fopen("test.txt","w"),fwrite 写了一段时间之后,我要读取这个文件,而在这之前文件名被修改成fuck.txt了,这样我就找不到我的文件了,请问该如何禁止用户...

是这样的,我开始的时候制定一个文件名,例如:test.txt

然后fopen("test.txt","w"),fwrite

写了一段时间之后,我要读取这个文件,而在这之前文件名被修改成fuck.txt了,这样我就找不到我的文件了,请问该如何禁止用户更改正在写入/读取的文件名 ?

流程是:
fpwrite = fopen("test.txt","w");
fwrite() ...
//在 fopen("test.txt","r");之前,文件名被更改了。
fpread = fopen("test.txt","r");
fread()...
fclose(fpread);
fwrite() ...
fclose(fpwrite);


windows下是无法修改正在读写的文件名的,不知道linux下为什么要这样设计。

|
前排学习一下,顺便提供一些资料。
1.  维基百科 file locking
2. 最近在读现代操作系统的时候,发现书中讲到*nix操作系统中的link的工作原理时,稍微提到了一些知识:
Understanding how link works will probably make it clearer what it does. Every file in UNIX has a unique number, its i-number, that identifies it. This inumber is an index into a table of  i-nodes,  one per file, telling who owns the file, 
where its disk blocks are, and so on. A directory is simply a file containing a set of (i-number, ASCII name) pairs. In the first versions of UNIX, each directory entry was 16 bytes-2 bytes for the i-number and 14 bytes for the name. Now a 
more complicated structure is needed to support long file names, but conceptually a directory is still a set of (i-number, ASCII name) pairs. In Fig. 1-21,  mail  has inumber 16, and so on. What link does is simply create a new directory entry with a (possibly new) name, using the i-number of an existing file. In Fig. 1-21(b), two entries have the same i-number (70) and thus refer to the same file. If either one is later removed, using the unlink system call, the other one remains. If both are removed, UNIX 00sees that no entries to the file exist (a field in the i-node keeps track of the number of directory entries pointing to the file), so the file is removed from the disk. 
3. http://unix.stackexchange.com/questions/93399/how-to-prevent-users-from-renaming-files-while-providing-write-permissions-on-li
这里提到:
To rename a file, write permissions to the file don't matter, renaming a file is a change to the directory, not the file. That's changing the directory entry to have a different name pointing to the file.

|
使用fcntl来控制文件吧

|
应该可以用文件锁
看看这个能否帮助你
http://blog.chinaunix.net/uid-20498361-id-1940273.html

|
我对第二段的理解:
在类unix上,一个文件对应一个底层数据结构inode。这些inode构成一张表,而我们所谓的文件只是这个文件对应的inode在这个表中的索引值——不妨以i-number来表示。

而linux上的目录/文件夹,只是一个特殊的文件(linux下,一切皆文件),它包含了一系列的:
(i-number, file name)
值对。

所以,file name和文件本身关系并不大。

同时上面第三段内容也告诉我们,在linux下防止在写文件时文件被重命名,应该考虑锁定文件所在目录(目录也是一个特殊文件)。

仅提供这样的思路。我对linux理解还很肤浅。如《Unix环境高级编程》这些书还没读。

|
我觉得,如果实际开发中遇到这个问题的时候。
我会考虑以rw方式打开文件。写完之后flush一下可以立即读。这样就不用担心文件改名造成随后以文件名再次打开找不到这个文件这种尴尬了。

    
 
 

您可能感兴趣的文章:

  • Linux c++虚函数(virtual function)简单用法示例代码
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • linux c下利用srand和rand函数生成随机字符串
  • 哪位大侠有unix/linux的函数和函数所在的文件
  • Linux下c基于openssl生成MD5的函数
  • linux中,动态库中的函数如何调用静态库中的函数
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • linux下自带了soup函数库和XML处理函数库了吗?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • Linux有定时器函数吗?是不是要自己实现?如果有的话是什么函数呢?谢谢
  • linux c malloc函数定义及用法详解
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • linux 2.6.35.4 内核中已没有netif_rx_schedule()函数,那替代函数是啥?
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • wcslen 等函数能用在linux下面吗?文件路径搜索有没有跨平台的函数库?
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • Linux 下析构函数为什么不是虚函数?
  • 大家讨论一下Linux的命名规则
  • linux内核态下怎么重命名文件?求解
  • 求教linux 拷贝重命名的问题
  • linux软件的命名规则?
  • linux shell如何非阻塞写命名管道
  • Linux 下 java 的File类的renameTo()方法 不能重命名文件
  • 在VC下如果要打开其它语言命名的文件读行二进制读取可以用TCHAR来定义文件名,读写函数他自己会自动选择,现在要换到LINUX下(UBUNTU)下开发,如果有多种语言命名的文件,我应该用什么类型来存放文件名?
  • Linux使用mv命令重命名时,新文件名已存在,会把原来的覆盖掉,却不问用户,怎么解决?
  • 对于linux内核中的一些数据类型命名的一些疑问。。求解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎样禁止linux服务器的自动黑屏?
  • 在Linux控制台中,Ctrl+S代表什么?如何禁止它?
  • linux系统中 apache+php 如何禁止将文件上传到某目录?
  • 怎么禁止Linux用户访问百度贴吧?
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu iis7站长之家
  • 禁止IP访问网站的多种方法分享(linux,php,nginx,apache)
  • linux下: 怎么禁止同一应用程序同时运行
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • Linux下chmod命令详细介绍及用法举例
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux僵尸(zombie)进程介绍及清除
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Linux/CentOS下的CST和UTC时间的区别以及不一致的解决方法
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux c++库boost unordered_set数据插入及查找代码举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,