LINUX输入输出与文件——续

1 目录操作

改变目录或文件的访问权限

#include <sys/stat.h>

int chmod(const char *path, mode_t mode); //mode形如0777

path参数指定的文件被修改为具有mode参数给出的访问权限。

当修改权限成功返回0,修改失败返回-1。

(man 2 chmod)

获取当前目录

#include <unistd.h>
 
char *getcwd(char *buf, size_t size); //获取当前目录,相当于pwd命令

将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小. 在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则返回NULL,errno的值则为ERANGE。

倘若参数buf为NULL,getcwd()会根据参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会根据工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完此字符串后自动利用free()来释放此空间。所以常用的形式:getcwd(NULL, 0);

获取成功,返回指向当前工作目录的指针,一般值与buf相等。

(man 3 getcwd)

改变当前目录

#include <unistd.h>

int chdir(const char *path); //修改当前目录,即切换目录,相当于cd命令

用来将当前的工作目录改变成以参数path所指的目录。

修改成功返回0,事变返回-1。

创建和删除目录

#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int mkdir(const char *pathname, mode_t mode);    //创建目录,mode是目录权限
int rmdir(const char *pathname);                 //删除目录

创建或者删除成功返回0,失败返回-1。

(man 2 mkdir; man 2 rmdir)

获取目录信息

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);        //打开一个目录
struct dirent *readdir(DIR *dir);      //读取目录的一项信息,并返回该项信息的结构体指针
int closedir(DIR *dir);                //关闭目录文件

opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和文件操作函数open()类似,接下来对目录的读取和搜索都要使用此返回值。函数失败则返回NULL。

readdir()函数用来读取目录的信息,并返回一个结构体指针,该指针保存了目录的相关信息。有错误发生或者读取到目录文件尾则返回NULL;dirent结构体如下:

On Linux, the dirent structure is defined as follows:

struct dirent {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* offset to the next dirent */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file; not supported by all file system types */
    char           d_name[256]; /* filename */
};

通常我们只关心dirent 结构体中的d_name信息。

kris_示例代码_1

/*************************************************************************
  > File Name: my_opendir.c
  > Author: KrisChou
  > Mail:[email protected]
  > Created Time: Tue 19 Aug 2014 10:19:06 AM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>

int main(int argc, char *argv[])
{
    DIR* pdir;
    struct dirent *pent;
    pdir = opendir(argv[1]);
    if(pdir == NULL)
    {
        perror("opendir");
        exit(1);
    }
    while((pent = readdir(pdir)) != NULL)
    {
        printf("%u %u %u %x %s \n",pent->d_ino,pent->d_off,pent->d_reclen,pent->d_type,pent->d_name);
    }
    closedir(pdir);
    return 0;
}

以上代码读取通过命令行输入的目录下的所有文件的信息(dirent 中所包含的信息)

LINUX输入输出与文件——续

时间: 2024-12-18 12:02:14

LINUX输入输出与文件——续的相关文章

Linux输入输出与文件

1. 基于文件指针的文件操作(缓冲) linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件. 1.1. 文件的创建,打开与关闭 原型为: #include <stdio.h> //头文件包含 FILE *fopen(const char *pach,const char *mode); //文件名 模式 int fclose(FILE *stream); fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL. fope

linux系统下文件命令详解

/etc 目录下包含的用户信息文件有: 3.1.0 passwd: 用户库文件 用户名 UID,GID 和工作目录都在此文件中 Shadow:存放用户口令的文件,每个用户的 口令加密后都放在此文件中 Group :主要存储用户组信息 Fstab: 系统开机启动自动挂载分区列表,需要设置开机自动挂载的分区都可以在此文件中加入. Inittab: 这个命令的配置文件,此文件是linux启动的重要文件,用来完成对整个系统的基本初始化配置 Hosts: 设定用户自己的ip与名字的对应表,类似window

输入输出与文件

输入输出与文件 一.终端I/O 1.单字符I/O:getchar(),putchar() (1)单字符输入(get character): [ int getchar();] 返回值为输入的字符(ASCII).可以接受任何字符,包括非打印字符.当一次键入多个字符时按下回车键后getchar开始逐个读取所有字符(包括回车符). 在某些编译环境下,因为scanf()函数不读取回车符且将其留在输入队列中,下次调用scanf()时会由于先读取到回车符而在读取数据前过早结束输入,所以常在scanf后用[g

linux磁盘及文件系统管理初步(1)

Linux系统管理 磁盘分区及文件系统管理 RAID LVM:能够实现磁盘边界的动态管理 网络属性管理 程序包管理:程序包的增删查改 sed 和awk 进程查看和管理 内核管理:内核的组成部分,内核的编译安装 系统启动流程 Linux内核的定制,编译内核,busybox 系统安装:kickstart,dhcp,pxe shell脚本编程 Linux磁盘及文件系统管理: 整个操作系统的组成部分:硬件和软件 整个操作系统的组成层次:最底层为硬件设备(这也是我们计算机能够运行的基础),在硬件设备上冯诺

绿色版的Linux.NET——“Jws.Mono”(续)

在前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来. 在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jws.mono虽然可以见到info页面,但实际上却是无法挂载任何的.NET站点的.因此这也有必要写下这篇的续篇来对前面的疏漏进行填补. 马上进入本节主题,在本节中我们主要讲述: (1).分析jws.mono的组成及相关组件的作用 (2).此mono非彼mono:bin目录详解 1.jws.mono组成

linux驱动程序头文件

1.编写任何驱动程序都必须带的头文件 #include <linux/module.h>:在编写任何模块都需要包含此头文件.该头文件自动包含了 <linux/version.h>头文件,该头文件包含了宏                                                                                                  MODULE_LICENSE("GPL")的定义. #include

linux下常用文件传输命令(转)

因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp,wget,curl. rcp rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输.要使用rcp,需要具备以下条件: (1)如果系统中有/etc/hosts 文件,应确保该文件包含要

JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习

JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了.如果你初学,不懂IO流,你可以从前往后慢慢看,但是你工作了一段时间你会发现,流的使用场景以及技术点是非常的强硬的,我们势必要掌握这个知识点,如果你觉得翻阅API比较鼓噪,看视频得不到精髓,看书看不到要点,你就跟随我的JAVA之旅,一起去探索吧! 一.I/O概述 I/O全名:Input Output

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据