Linux C编程 2(原创)

hondrif的学习日志
 1 系统调用stat将文件filename的信息存放在参数buf指向的stat结构中
   int stat(const char *filename,struct stat *buf)  用来获取文件的状态
   是系统调用
   其中mode_t指的是 Access: (0664/-rw-rw-r--)
   r表示4, w表示2,x表示1

   文件模式定义的常量符号,定义在文件<sys/stat.h>
   (类似的,lstat对link文件,fstat的参数是fd,文件描述符)
   其实可以直接在bash中使用stat这个系统调用  $ stat filename
   可以直接在屏幕上显示结果
  

 2 opendir 打开目录项/ readdir 读取目录项中内容/ closedir 关闭目录项

   scanfdir函数用来实现目录文件的定位
 
   下面一段程序实现将当前目录下的文件以逆序的方式显示出来
#include<sys/types.h>
#include<dirent.h>
                                                                                                              
int main()
{
  struct dirent **namelist;
  int n;
                                                                                                              
  n=scandir(".",&namelist,0, alphasort);
  // int scandir(const char* dir, struct dirent ***namelist,
               int (*select)(const struct dirent *),
               int (*compar)(const struct dirent **,const struct dirent **)            
              )
  //四个参数

  if(n<0)
      perror("scandir");
 else
       while(n--) printf("%s/n",namelist[n]->d_name);
}



类似还有一个例子:
vi lls.c
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

int main(int argc, char *argv[])
{
        DIR *dp;
        struct dirent *dirp;
        if(argc !=2)
                printf("请输入一个 路径名/n");
        else
        {
        if((dp = opendir(argv[1])) == NULL)
                printf("不能打开 路径 %s/n", argv[1]);
        else
        {        while((dirp = readdir(dp)) != NULL)
                printf("%s/n", dirp->d_name);
        }
        closedir(dp);
        }
        exit(0);
}
:wq
gcc -o lls lls.c

/
   dir,dirent为文件管理方面的数据结构
   链表形式:dir 有一个指向下一个文件的指针next
  其中readdir(    DIR ) 函数得到当前dir,而且dir=dir->next;


#include <sys/dir.h>

Description
A directory is a file that contains information and structures necessary to define a file hierarchy. A file is interpreted as a directory by the system if it has the S_IFDIR file mode. All modifications to the structure of a directory must be performed under the control of the operating system.

The directory file format accommodates component names of up to 256 characters. This is accomplished through the use of a variable-length structure to describe individual directory entries. The structure of a directory entry follows.

Note: This structure is a file system-specific data structure. It is recommended that file system-independent application programs use the file system-independent direct structure and its associated library support routines.
struct direct {
         ino_t      d_ino;  /* inode number of entry */
         ushort     d_reclen;   /* length of this entry */
         ushort     d_namelen;  /* length of string in d_name */
         char       d_name[256]; /* name of entry (filename) */
  };
By convention, the first two entries in each directory are . (dot) and .. (dot dot). The . (dot) is an entry for the directory itself. The .. (dot dot) entry is for the parent directory. Within the root ( / ) directory the meaning of .. (dot dot) is modified; because there is no parent directory, the .. (dot dot) entry has the same meaning as the . (dot) entry.

/

3  access 获得用户对文件的访问许可
 int access(const char *pathname, int mode)
 mode包括  R_OK, W_OK, X_OK 以及 F_OK
  检查读写权利,不是赋予读写权利──chmod

 umask为进程设置文件方式 设置屏蔽字

  chmod(const char *path, mode_t mode) 和 chown( const char* path, uid_t owner, gid_t group)
 /*是系统调用*/

4 目录项操作
(1)truncate 截断文件。打开文件时可以用O_TRUNC标志可清空文件数据,将文件长度变为0
   int truncat(const char* path, off_t length)
(2)link
    不同于系统调用ln,系统调用link 用法link File1 File2,硬链接
     FIle1,FIle2都指向同一文件(inode),修改File1 则File2内容也会发生变化
 (3)symlink 软链接(符号链接)
    符号链接 只是包含一个文件的名字的文件,可以给一个目录做链接,也可以跨越文件系统做链接
   
     readlink 打开符号链接(
系统调用

(4) unlink 系统调用

int unlink(const char* path)

当path指向一个符号链接时,则该链接被删除
当文件链接数为0时,没有有其它进程打开这个文件,即内存inode的引用数为1,释放inode所指向的磁盘数据块,并释放inode本身
当文件链接数为0时,有其它进程打开这个文件,即内存inode的引用数大于1,还不能释放该文件占用的磁盘数据块和索引节点,仅将内存节点引数减1

(5)mkdir / rmdir / mknod 系统调用

(6)remove 如果是文件同unlink; 如果是目录功能同rmdir
     rename 系统调用

(7)chdir改变目录
     getcwd获得当前目录
     char* getcwd(char *buf, size_t size)

(8)utime改变文件的访问时间和修改时间
     #include<sys/types.h>
     #include<utime.h>

5 设备特殊文件
设备号所用的数据类型为 dev_t
对st_dev和t_rdev 用major和minor两个宏可以得到主设备号和从设备号

6 sync函数实现同步,为了保证磁盘上的实际文件系统与缓存中内容一致
只是将所有修改过的块的缓存排入些队列,不等实际的I/O结束

7 mount 将一个文件系统安装到某个目录下

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值