dup ,dup2,fcntl,ioctl系统调用

 . dup ,dup2 函数
 int dup(int oldfd)
 int dup(int oldfd , int newfd)

dup用来复制参数oldfd的文件描述符
duo2可以用newfd来指定新文件描述符的数值

2.fcntl函数
对已经打开的文件描述符进行各种控制操作,以及改变已经打开文件的各种属性

3.ioctl函数
控制设备,不能用其他函数进行控制操作都可以用ioctl来进行

3.文件属性的操作
 1.  shell里可通过ls来获取文件属性,那么在程序里怎么获取文件属性呢?
         用到stat/fstat/lstat

         man  stat
          #include<sys/types.h>
          #include<sys/stat.h>
          #include<unistd.h>
          int stat(const char *file_name,struct stat *buf);
          int fstat(int filedes,struct stat *buf);
          int lstat(const char *fime_name ,struct stat *buf);

stat 获取由参数file_name指定的文件名的状态信息,保存参数到struct stat *buf中
         fstat   与stat 区别,fstat通过文件描述符来指定文件
         lstat  与stat,对于符号连接文件,lstat返回的是符号连接文件本身的状态信息。而stat返回的是符号连接文件指向的文件的状态信息。

            struct stat {
                dev_t     st_dev;     /* ID of device containing file */
                ino_t     st_ino;     /* inode number */
                mode_t    st_mode;    /* protection */
                nlink_t   st_nlink;   /* number of hard links */
                uid_t     st_uid;     /* user ID of owner */
                gid_t     st_gid;     /* group ID of owner */
                dev_t     st_rdev;    /* device ID (if special file) */
                off_t     st_size;    /* total size, in bytes */
                blksize_t st_blksize; /* blocksize for file system I/O */
                blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
                time_t    st_atime;   /* time of last access */
                time_t    st_mtime;   /* time of last modification */
                time_t    st_ctime;   /* time of last status change */
            };

eg:获取文件属性
                                                                                                                                                                                              79,0-1        Bot

 #include<stdio.h>
 #include<time.h>
 #include<sys/stat.h>
 #include<unistd.h>
 #include<sys/types.h>
 #include<errno.h>

 int main(int argc , char * argv[]){
         struct stat buf;
         /*check param number*/
         ){
                 printf("Usage mystat  <file_name>\n");
                 exit();
         }
         /*get file attr*/
         ],&buf) == -){
                 perror("stat:");
                 exit();
         }
         //print file attr
         printf("device is :%d\n",buf.st_dev);
         printf("inode is :%d\n",buf.st_ino);
         printf("mode is :%d\n",buf.st_mode);
         printf("number of hard links  is :%d\n",buf.st_nlink);
         printf("user ID of owner  is :%d\n",buf.st_uid);
         printf("group ID of owner  is :%d\n",buf.st_gid);
         printf("device type (if inode device ) is :%d\n",buf.st_rdev);

         printf("total size ,in bytes  is :%d\n",buf.st_size);
         printf("blocksize for filesystem I/O  is :%d\n",buf.st_blksize);
         printf("number of blocks allocated is :%d\n",buf.st_blocks);

         printf("time of last access  is :%s\n",ctime(&buf.st_atime));
         printf("time of last modification  is :%s\n",ctime(&buf.st_mtime));
         printf("time of last change  is :%s\n",ctime(&buf.st_ctime));

         ;

 }
 output :
 [fubin@localhost C]$ ./my_chmod  example.c
 device
 inode
 mode
 number of hard links
 user ID of owner
 group ID of owner
 device type (
 total size ,
 blocksize
 number of blocks allocated
 time of last access   ::
 time of last modification   ::
 time of last change   :: 

2.设置文件属性

 chmod/fchmod , chown/fchown/lchown,truncate/ftruncate,utime,umask
 .chmod/fchmod
 修改文件的存取权限
 .chown/fchown/lchown
 修改文件的用户id和组id
 .ftruncate/truncate
 改变文件大小
 .utime
 改变文件的st_mtime和st_ctime域,即存取时间和修改时间。
 .umask
 使用文件创建时使用的屏蔽字

屏蔽文件权限eg:

 #include<stdio.h>
 #include<sys/types.h>
 #include<sys/stat.h>
 #include<fcntl.h>

 int main(){

         umask();// don't shield any permission
         ){
                 perror("creat");
                 exit();
         }

         umask(S_IRWXO);// shield other user's permission
         ){
                 perror("creat");
                 exit();
         }

         ;
 }

 output:
 -rwxrwx---.  fubin fubin     Jan   : umasktest1.txt
 -rwxrwxrwx.  fubin fubin     Jan   : umasktest.txt
     

3.文件的移动和删除
  1.文件的移动

 rename 修改文件名或移动文件位置
   #include <stdio.h>
     int rename(const char *oldpath, const char *newpath);
   将oldpath文件夹名改为newpath,若newpath存在,则源文件会被删除
   用rename实现简单linux下mv的功能
   #include<stdio.h>
   #include<stdlib.h>
   int main(int argc , char **argv){

         ){
                 perror("my_mv <oldpath> <newpath>");
                 exit();
         }

         ],argv[]) < ) {
                 perror("rename");
                 exit();
         }

         ;
 }

 incompatible implicit declaration of built-in function 'exit'
 警告:exit函数在stdlib库中,需要包含#include<stdlib.h>进来

2.文件的删除

 unlink  文件的删除
 rmdir   目录的删除
 remove 封装了unlink和rmdir

 unlink:文件的链接数为0且没有进程打开这个文件,文件被删除且其占用的磁盘空间被释放。
 //如果文件的链接数为0但是有进程打开了这个文件,文件暂时不删除,知道所有打开这个文件的进程结束时文件才被删除。
 使用这一点可以确保程序崩溃时,他所创建的临时文件也不会保留。
        #include <unistd.h>
        int unlink(const char *pathname);
  //参数pathname指向一个符号链接,连接被删除。若 指向一个套接字(socket),FIFO(命名管道),设备文件,该名字被删除,但已经打开这个文件的进程仍然可以使用。
  

3.目录的创建和删除
  1.目录的创建 mkdir
  2.目录的删除 rmdir

Linux C 程序 文件属性,文件删除(15)的更多相关文章

  1. linux应用程序开发-文件编程-系统调用方式

    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...

  2. linux应用程序开发-文件编程-库函数

    ---恢复内容开始--- c库函数文件操作独立于具体的系统平台,可移植性较好. 库函数-创建和打开 FILE*fopen(const char*filename,const char*mode) mo ...

  3. linux中/etc/fstab文件删除或修改了,导致系统无法启动

    在linux中,/etc/fstab文件是磁盘挂载的问题,若该文件不小心给修改了,或者被删除了,那么就会导致系统无法重启.因为/etc/fstab文件是记录磁盘挂载的信息,若该文件出现了问题,那么对应 ...

  4. linux文件属性之linux文件删除原理

    Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除.一般来说,每个文件都有2个link计数器:i_count和i_nlink. i_count的 ...

  5. Linux文件属性之Linux文件删除重要原理详解

    Linux下文件删除的原理 只要dongdaxiafile(源文件).服务进程.dongdaxiaflie_hard_link(硬链接文件)三个中的任意一个存在文件不会被删除.

  6. day59:Linux:编辑工具vim&文件类型&文件属性

    目录 1.Linux编辑工具vim 2.Linux文件类型 3.Linux文件属性 4.今日份Linux练习题 Linux编辑工具vim 1.什么是vim 文本文件的编辑工具,  和windows的n ...

  7. 【Linux】rsync同步文件 & 程序自启动

    rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...

  8. 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化

    第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件  ...

  9. linux文件删除原理

    文件删除的原理 linux的文件名是存在父目录的block里面的,并指向这个文件的inode节点,这个文件的inode节点在标记指向存放这个文件的block的数据块.我们删除文件,实际上不是清除ino ...

随机推荐

  1. swift获取图片像素颜色值

    extension UIImage{ /** 获取图片中的像素颜色值 - parameter pos: 图片中的位置 - returns: 颜色值 */ func getPixelColor(pos: ...

  2. ios开发——实用技术篇Swift篇&多点触摸与手势识别

    多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...

  3. lvs持久性工作原理和配置

    作者: ISADBA|FH.CN 日期: // 转载请注明: 作者:ISADBA.COM|FH.CN BLOG:http://isadba.com 原文:http://isadba.com/?p=67 ...

  4. 关于php配置文件

    一:配置文件(php.ini)在 PHP 启动时被读取.对于服务器模块版本的 PHP,仅在 web 服务器启动时读取一次.对于 CGI 和 CLI 版本,每次调用都会读取. 二:Note that t ...

  5. python--json & pickle 模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...

  6. vim粘贴代码格式变乱

    转自netingcn.com 有时候从编辑器里面复制粘贴代码到vim中,代码格式会完全乱套.其原因是vim开启了smartindent(智能缩减)或autoindent(自动对齐)模式.为了保持代码的 ...

  7. html5 js os build

    1.NodeJS6.6 install   https://nodejs.org/en/ c:\nodejs>npm install -g grunt-cliC:\Users\police\Ap ...

  8. this.class.getClassLoader()怎么理解?

    this.class.getClassLoader()怎么理解? java是面向对象语言,面向对象的语言的宗旨就是万事万物皆对象,那么类也是一个对象,类里面的属性和方法也是对象.java里面的所 有的 ...

  9. 如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)

    1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X ...

  10. 一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目

    对于不久之前学习到的一个有关的类似于QQ聊天框的模拟项目,对其中涉及到的知识在这里做一下总结. 首先,你要先创建一个客户端聊天框(取名为:ChatClient,它是你创建的类),这个类继承了Frame ...