文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>BLP-chap3-文件操作

BLP-chap3-文件操作

时间:2009-05-15  来源:mercurial-hl

目录是文件,用来保存其他文件的节点号和名字

cd ~user:可以进入user的主目录

/dev/null:
    写向该设备的输出被丢弃,读该设备会立刻返回一个文件结束符
    创建空文件:
       cp /dev/null empty_file
touch:
    改变文件的修改时间,并不会把有内容的文件变成空文件

块设备是那些支持随即文件系统存取的设备,例如磁盘

库函数为了解决底层系统调用的低效率问题

open给出的模式值将与用户掩码(umask)的反值做AND操作。

strerror:(见apue p11)
    #include <string.h>
    char   *strerror(int errnum);

    strerror将errnum(通常是errno)映射为一个出错字符串,并返回此    字符串的指针。

XSI: X/Open System Interface,X/Open系统接口

创建临时文件的技巧:
    先open创建一个文件,然后调用unlink。
    如何在linux下使用c语言操作临时文件

unlink函数删除文件的目录入口,所以临时文件还可以通过文件描述符进    行访问,直到最后一个打开的进程关闭文件操作符,或者程序退出后临时文    件被自动彻底地删除。

/proc文件系统:
    linux提供一个特殊的文件系统procfs,通常表现为/proc.
    cat /proc/cpuinfo
    cat /proc/meminfo
    cat /proc/version
    cat /proc/net/sockstat
    cat /proc/sys/fs/file-max

    改变最多同时能打开的文件数:
    echo 60000 > /proc/sys/fs/file-max

4     0 16828 16823  15   0   4660  1480 wait   Ss   pts/1      0:00 bash

[root@localhost chap3]# ls /proc/16828
attr     coredump_filter  environ  limits    maps    mountstats  root       stat    task
auxv     cpuset           exe      limits    mem     oom_adj     schedstat  statm   wchan
cmdline  cwd              fd       loginuid  mounts  oom_score   smaps      status

[root@localhost chap3]# cat /proc/16828/cmdline
bash[root@localhost chap3]# od /proc/16828/cmdline
0000000 060542 064163 000000
0000005
[root@localhost chap3]# od -c /proc/16828/cmdline
0000000   b   a   s   h  \0
0000005

[root@localhost chap3]# ls /proc/16828/fd
0  1  2  255

目录扫描程序
#include <unistd.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>

/* 伪代码
 * depthfirst(root)
 * {
 *      for each node at or below root
 *      visit   node;
 *              if node is a directory
 *                depthfirst(node);
 * }
 */

void
printdir(char *dir, int depth)
{
        DIR             *dp;         /* 目录流 */
        struct dirent   *entry;      /* dirent结构体 */
        struct stat     statbuf;     /* 用于返回通过文件名查到的文件状态信息 */

        /* 打开目录,并创建目录流 */
        if ((dp = opendir(dir)) == NULL)
        {
                fprintf(stderr, "opendir %s error\n", dir);
                return;
        }

        chdir(dir);

        /* 循环读目录 */
        while ((entry = readdir(dp)) != NULL)
        {
                lstat(entry->d_name, &statbuf); /* 获取文件状态信息 */
                if (S_ISDIR(statbuf.st_mode))/* 如果是目录,则递归; 如果是文件,则打印名字*/
                {
                        if (strcmp(".", entry->d_name) == 0
                                || strcmp("..", entry->d_name) == 0)
                                continue;

                        printf("%*s%s/\n", depth, " ", entry->d_name);   /* 打印目录名 */

                        /* 递归 */
                        printdir(entry->d_name, depth+4);
                } else {
                        printf("%*s%s\n", depth, " ", entry->d_name);   /* 打印文件名 */
                }
        }

        chdir("..");
        closedir(dp);
}

int
main(int argc, char *argv[])
{
        char *topdir = ".";
        if (argc >= 2)
                topdir = argv[1];

        printf("directory scanf: %s\n", topdir);
        printdir(topdir, 0);
        exit(0);
}




    运行:
[root@localhost chap3]# ./printdir /root/src/blp
directory scanf: /root/src/blp
 chap11/
    test_thread
    test_thread.c
 chap3/
    copy_system.c
    destfile
    copy_system
    printdir.c
    srcfile
    printdir

    
   
相关阅读 更多 +
排行榜 更多 +
来逛水族馆

来逛水族馆

音乐节奏 下载
组合战争

组合战争

休闲益智 下载
元美汇

元美汇

购物比价 下载