Linux系统调用之目录操作

原创 2018年04月15日 20:10:10

Linux系统调用之目录操作

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>


int main(void)
{
    int fd;
    int flag;

    // 测试字符串
    char *p = "我们是一个有中国特色的社会主义国家!!!!!!";
    char *q = "呵呵, 社会主义好哇。。。。。。";


    // 只写的方式打开文件
    fd = open("test.txt", O_WRONLY);
    if(fd == -1)
    {
        perror("open");
        exit(1);
    }

    // 输入新的内容,该部分会覆盖原来旧的内容
    if(write(fd, p, strlen(p)) == -1)
    {
        perror("write");
        exit(1);
    }

    // 使用 F_GETFL 命令得到文件状态标志
    flag = fcntl(fd, F_GETFL, 0);
    if(flag == -1)
    {
        perror("fcntl");
        exit(1);
    }

    // 将文件状态标志添加 ”追加写“ 选项
    flag |= O_APPEND;
    // 将文件状态修改为追加写
    if(fcntl(fd, F_SETFL, flag) == -1)
    {
        perror("fcntl -- append write");
        exit(1);
    }

    // 再次输入新内容,该内容会追加到旧内容的后面
    if(write(fd, q, strlen(q)) == -1)
    {
        perror("write again");
        exit(1);
    }

    // 关闭文件
    close(fd);

    return 0;
}

文件描述符的拷贝dup2.c

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


int main()
{
    int fd = open("english.txt", O_RDWR);
    if(fd == -1)
    {
        perror("open");
        exit(1);
    }

    int fd1 = open("a.txt", O_RDWR);
    if(fd1 == -1)
    {
        perror("open");
        exit(1);
    }

    printf("fd = %d\n", fd);
    printf("fd1 = %d\n", fd1);

    int ret = dup2(fd1, fd);
    if(ret == -1)
    {
        perror("dup2");
        exit(1);
    }
    printf("current fd = %d\n", ret);
    char* buf = "主要看气质 ^_^!!!!!!!!!!\n";
    write(fd, buf, strlen(buf));
    write(fd1, "hello, world!", 13);

    close(fd);
    close(fd1);
    return 0;
}

文件描述符的拷贝dup

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


int main()
{
    int fd = open("a.txt", O_RDWR);
    if(fd == -1)
    {
        perror("open");
        exit(1);
    }

    printf("file open fd = %d\n", fd);

    // 找到进程文件描述表中 ==第一个== 可用的文件描述符
    // 将参数指定的文件复制到该描述符后,返回这个描述符
    int ret = dup(fd);
    if(ret == -1)
    {
        perror("dup");
        exit(1);
    }
    printf("dup fd = %d\n", ret);
    char* buf = "你是猴子派来的救兵吗????\n";
    char* buf1 = "你大爷的,我是程序猿!!!\n";
    write(fd, buf, strlen(buf));
    write(ret, buf1, strlen(buf1));

    close(fd);
    return 0;
}

获得目录下文件的个数(递归计算)

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int getFileNum(char* root)
{
        //打开指定的路径
        DIR* dir=opendir(root);
        if(dir ==NULL)
        {
                perror("open dir");
                exit(0);
        }

        //递归读取文件
        int total=0;
        char path[1024]={0};
        struct dirent* ptr=NULL;
        while((ptr = readdir(dir)) !=NULL )
        {
                //忽略掉.和..
                if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0 )
                {
                        continue;
                }
                //if is regular file
                if(ptr->d_type==DT_REG)
                {
                        total ++;
                }
                //如果是目录
                if(ptr->d_type==DT_DIR)
                {
                        sprintf(path,"%s/%s",root,ptr->d_name);
                        total+=getFileNum(path);
                }

        }
        closedir(dir);
        return total;
}

int main(int argc,char* argv[])
{
        int total=getFileNum(argv[1]);
        printf("%s has file number: %d\n",argv[1],total);
        return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kaikai_sk/article/details/79952562

★★★敬请留意★★★:和微软一模一样的记事本的源代码(3)

 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal w...
  • deak
  • deak
  • 2001-06-06 16:47:00
  • 535

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神的无限的!           库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准。使...
  • a1314521531
  • a1314521531
  • 2016-03-28 09:09:46
  • 1896

linux系统调用linux系统调用

  • 2011年08月02日 00:20
  • 101KB
  • 下载

linux 系统调用

  • 2010年10月20日 17:32
  • 253KB
  • 下载

潜入式linux系统调用

  • 2010年03月15日 22:38
  • 345KB
  • 下载

Linux 下C语言文件-目录基本操作

仅提供大概参考~ 纯手写未调试/** *编写一个程序,提供一个参数(文件名/路径) *如果该参数对应文件名/目录名不存在,则创建之 *设置创建者拥有RWX权限,其他用户只有R-X权限 *如果对应文件存...
  • bykjscn
  • bykjscn
  • 2012-10-31 16:19:42
  • 4003

linux C实现ls命令

  • 2010年06月22日 17:39
  • 3KB
  • 下载

Linux下C/C++ 目录和文件操作

学习Linux环境编程  读取文件和目录是很重要的环节,因为Linux环境下  "一切皆文件"     首先得明白文件描述符的概念,每一个进程都会默认打开标准输入,标准输出,标准出错 下面这个案列很好...
  • szqsdq
  • szqsdq
  • 2015-09-10 13:50:25
  • 1999

linux常见的文件及目录操作12个命令

基本常用的12个命令如下吧:      1, mkdir命令 mkdir用来创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。 (1) ...
  • CloudXli
  • CloudXli
  • 2018-01-30 20:33:14
  • 121

linux 文件和目录操作的相关函数

struct stat { mode_t    st_mode;    文件类型,文件权限 ino_t     st_ino;        i节点号 dev_t    st_dev;    ...
  • Gitar520
  • Gitar520
  • 2012-05-19 13:14:23
  • 2557
收藏助手
不良信息举报
您举报文章:Linux系统调用之目录操作
举报原因:
原因补充:

(最多只允许输入30个字)