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

请问linux下用c语言如何输出一个文件的9种属性?

    来源: 互联网  发布时间:2016-05-06

    本文导语:  像这样的一段菜鸟程序 文件名  main.c #include  #include  #include  #include  #include  #include  int main(int argc, char*argv[]) { int opt; int fildes; struct stat file_stat; off_t file_size; mode_t file_mode; if (argc != 3) { /*参数太少...

像这样的一段菜鸟程序
文件名  main.c


#include 
#include 
#include 
#include 
#include 
#include 


int main(int argc, char*argv[])
{
int opt;
int fildes;
struct stat file_stat;
off_t file_size;
mode_t file_mode;

if (argc != 3) { /*参数太少*/
printf("Too less arguement.n");
exit(1);
}

if ((fildes = open(argv[2], O_RDONLY)) == -1) { /*打开文件出错*/
printf("Open File Error.n");
exit(1);
}

if ((fstat(fildes, &file_stat)) == -1) { /*获取文件属性出错*/
printf("Fstat File Error.n");
exit(1);
}

file_size = file_stat.st_size;
file_mode = file_stat.st_mode;

while ((opt = getopt(argc, argv, "nsm")) != -1) { /*按照第一个参数的匹配进行处理*/
switch(opt) {
case 'n': 
printf("Name:t%sn", argv[2]);
break;
case 's':
printf("Size:t%dn", file_size);
break;
case 'm':
printf("Mode:t%dn", file_mode);
break;
case '?':
printf("Unknow arguement.n");
break;
}
}

return 0;
}



gcc -o run main.c  没出错

但假如想测试输出文件权限时   run -m file
却只能得到33188   不能得到-rw-r--r--


请问怎样实现这种-rw-r--r--模式的输出

|

#include 
#include 
#include 
#include 
#include 
#include 


int main(int argc, char*argv[])
{
    int opt;
    int fildes;
    struct stat file_stat;
    off_t file_size;
    mode_t file_mode;
    char mode[] = "----------";
    int pos;
    mode_t m;

    if (argc != 3) {    /*参数太少*/
        printf("Too less arguement.n");
        exit(1);
    }

    if ((fildes = open(argv[2], O_RDONLY)) == -1) {
    /* 打开文件出错 */
        printf("Open File Error.n");
        exit(1);
    }

    if ((fstat(fildes, &file_stat)) == -1) {
    /* 获取文件属性出错 */
        printf("Fstat File Error.n");
        exit(1);
    }
    
    file_size = file_stat.st_size;
    file_mode = file_stat.st_mode;

    /* 按照第一个参数的匹配进行处理 */
    while ((opt = getopt(argc, argv, "nsm")) != -1) {
        switch(opt) {
            case 'n': 
                printf("Name:t%sn", argv[2]);
                break;
            case 's':
                printf("Size:t%lldn", (long long)file_size);
                break;
            case 'm':
                printf("Mode:t%dn", file_mode);
                printf("Mode:t%07on", file_mode);

                /*
                 * XXX: S_ISUID and S_ISUID not processed
                 */
                m = file_mode;
                pos = 0;
                if (S_ISREG(m))
                        /* mode[0] = '-' */;
                else if (S_ISDIR(m))
                        mode[pos] = 'd';
                else if (S_ISCHR(m))
                        mode[pos] = 'c';
                else if (S_ISBLK(m))
                        mode[pos] = 'b';
                else if (S_ISFIFO(m))
                        mode[pos] = 'p';
                else if (S_ISLNK(m))
                        mode[pos] = 'l';
                else if (S_ISSOCK(m))
                        mode[pos] = 's';
                else if (S_ISWHT(m))
                        mode[pos] = 'w';

                pos++;
                if (S_IRUSR & m)
                        mode[pos] = 'r';
                pos++;
                if (S_IWUSR & m)
                        mode[pos] = 'w';
                pos++;
                if (S_IXUSR & m)
                       mode[pos] = 'x';

                pos++;
                if (S_IRGRP & m)
                        mode[pos] = 'r';
                pos++;
                if (S_IWGRP & m)
                        mode[pos] = 'w';
                pos++;
                if (S_IXGRP & m)
                       mode[pos] = 'x';

                pos++;
                if (S_IROTH & m)
                        mode[pos] = 'r';
                pos++;
                if (S_IWOTH & m)
                        mode[pos] = 'w';
                pos++;
                if (S_IXOTH & m)
                       mode[pos] = 'x';
                printf("Mode:t%sn", mode);
                break;
            case '?':
                printf("Unknow arguement.n");
                break;
        }
    }
    
    return 0;
}

    
 
 

您可能感兴趣的文章:

  • 请问一下javascript里面有没有readonly属性(高分求教)
  • 请问怎么可以控制在浏览中的文件属性?
  • 请问 VB 中的 MSFlexGrid 控件的 DataSource 属性如何用法 ?
  • 请问:使用System.getProperty(),或者如何得到属性文件的路径
  • 请问怎么改属性?
  • 请问这段程序里面的length属性是哪个类里面的?
  • 请问jLabel的文本左右对齐属性设置方法:setHorizontalAlignment(int alignment)是如何取值的?
  • 请问有没有C语言的函数来读linux下的文件属性
  • 请问怎样把一个目录下的所有文件夹属性设置为755,文件设置为644?
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • 请问Attribute和Property是否都翻译为属性?
  • 新手求救----请问从数据库中查询的记录集都有哪些属性?
  • 请问怎么修改数据库和表的UPDATE属性为YES 拜托各位大虾帮帮忙 我向您敬礼了
  • ??????????请问如何让一个树节点能够带上2个属性?再线等待!
  • 请问Linux中如何给硬盘分区?格式化?如何查看分区的属性呀?
  • 请问在EJB中,怎样同过JB7在XML的配置描述器中加入些特定的环境属性??谢谢
  • 请问useBean的scope属性设置成page和设置成request有什么区别?详细点!
  • 请问如何动态命名重定向输出文件名,并将内容输出到该文件?
  • 急!!请问如何将输入的INT或LONG型的数据按位(十进制)数输出,日期型按照如1988年12月12日 3点50分输出???
  • [新手提问]请问在命令行下追踪程序输出信息的方法
  • 请问这是怎么回事?NOW='date';echo $NOW;输出的是date,' '不是可以将命令的输出设为另一命令的参数吗?
  • 请问在JAVa中如何输出引号
  • 请问:怎么提取标准输出(stdout)的内容到别的地方显示?
  • 请问如何捕获"tar"命令的标准错误输出
  • 高分请问:用了System.setOut()后怎样才能恢复到默认输出状态?
  • 请问如何在jsp页面中用class在网页上输出信息?100分
  • 请问一个有关cron输出的问题
  • 请问如何将标准输出重定向到标准输入?
  • 请问如何在程序中获得shell命令输出的信息?
  • 请问能否将内核中的printk定向输出到一个指定的文件??
  • 请问skyyoung关于输出输出流如何写进该URL文件
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问哪里有ubuntu 9.0版本的中文语言包和KDE的中文语言包下载,我用Google搜索了很多地方都没有!
  • 请问如何在C语言中嵌入的shell脚本中获得C语言程序中定义的某个变量
  • 请问怎么改变默认的语言?
  • 请问大侠学java要有c语言基础吗?
  • 请问如何才能让REDHAT 7.3的省缺语言变成英文。
  • 请问《软件工程java语言实现》一书在那里能下载 iis7站长之家
  • 请问《软件工程java语言实现》一书在那里能下载
  • 请问高级程序员有没有考java语言的?
  • 请问unix终端的光条式菜单程序是用什么语言开发的?谢谢
  • 请问,怎样用C语言连接SQL2000数据库?
  • 请问要开发一种网络电话,要会什么编程语言?
  • C语言是有函数组成 那Java是由什么组成的 ------类 ? 请问
  • 请问在UNIX系统下C语言中的数据类型转换的问题
  • ~~~请问哪里有Linux下的C语言函数参考手册,最好是英文版的~~~
  • 请问那里有c语言的编译器源代码啊?
  • 请问有没有用AT&T汇编语法讲汇编语言的书?
  • 请问怎样用C语言写一个SHELL
  • 请问ubuntu自动更新的语言包放到那个文件夹下
  • 请问学那种语言最有钱途呢?JAVA如何?
  • 请问Linux数据库编程是否也可以支持通用的SQL语言进行数据库编写.
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3