apue 2013-03-24

If (isdir(dir->name))   continue;

If (dir->d_name[0] == '.')  continue;

 

If (p==NULL)  continue;

 

Strrchr    :从最后开始找

 

Char *ptr = ".mp3".   文件个数

#include "count_line_file.h"

Gcc .c  .c   同时编译

 

 

#ifndef

#else

#endif

 

Stat(name,&info);

If ((S_ISDIR)(info.st_mode))

Return 1;

Else

Return 0;

 

 

 

仅仅是一个名字 

#ifndef

#define

#endif

 

最大名字

Stat((dir->d_name,&info);

If (max,info.st_size){

Max=

Strcpy(name,dir->d_name);

}

 

目录操作设置continue

Return;结束没有返回值的函数

没有加其它文件

Myls -l dir   现在当前目录   ls  ..  Cd .. ->ls

 

Chdir (argv[1]);    cd dir  cat a.c

Opendir(".");    切换

 

把名字连起来  

Sprintf (name,"%s /%s",argv[1]),dir->d_name);

 

创建目录文件  :  mkdir   (目录名称,权限);

智能cp   mycp   用递归

 

mp3中提取专辑图片

Jpg  文件的协议头

 

知识:mp3文件格式,jpg文件格式

难点大小   不能用str 开头的函数

二进制文件有很多'\0'

 

Stat  fstat   lstat

文件名 文件描述符

 

Ln -s stat.c  abcdef

Ls  -l  abcdef  

创建快捷方式   

 

Lstat  本身  stat   stat.c  链接到

 

Chmod  修改文件权限    文件的复制(带权限)

在代码中添加    chmod(argv[2],info.argv1.st.mode)   最好在open后面加

Fchmod  文件描述符修改文件权限

 

面试题

已打开的文件描述符   ,如何获取文件名

 

Chown  改成  root   uid   拥有者

Truncate  改变文件大小

 

Link  连接数

 

Symlink  readlink   目录也是目录文件

 

/proc:不是保存在磁盘上是内核上的硬件  内核映像   内存映像

/bin  /sbin  /lib  /root /proc  (判断)进程号

每个数每个进程的pid

 

内核知道cpu

每个进程文件里有fd  (子文件夹)

当前进程打开文件描述符

Ls -l 

 

Getpid()  /proc/pid/fd  都是一个link

后边的文件名

sleep(100000)  ps进程号

Open   ps  -aux | grep

 

Cd /proc/2885/进程号

 3  link  ->  syslink  readlink  

属性是link   lstat

readlink

文件指向的文件描述符

 

Getcwd();   绝对路径   唯一的

Pwd  

Mkdir  rmdir

获取文件描述符  

const 输入不带输出

Fd -> filename  

Fd->FILE*

FILE * -> fd

FILE ->filename

 

第五章    文件操作   ANSI标准库提供的文件操作

找开文件   fopen

文件操作      读      写     ascii

字符          fgetc    fputc   ascii

行            fgets    fputs   ascii

块            fread    fwrite  ascii  二进制

关闭文件   fclose

 

缓冲

Exit()  =  清缓冲   + _exit();

File  查看

Od -c  查看

 

Fp->FILE *

FILE -> fd

Fgets  fputs  拷贝  '\0'  不好用

 

文本文件  open  fopen

二进制文件:open   fopen?不一定

 

Fopen(文件名,打开文式)

文件名,字符串,相对路径   绝对路径   "a.c"

 

打开方式  "r"   "w"   "r+"   "w+"   "a"   "a+"  字符串

          只读  只写  读写出错 读写只写   

Strace   ./a.out  追踪程序调用哪些系统

 

Fopen("a.c","rw");    O_RDONLY

Fopen("a.c","read+write");    r+

Fopen("a.c","roinu");   r 

也是调用系统调用

Fopen("a.c","iiiiiiiiiiiiiii");   r

 

"r"

"w"  小心

"r+"

 

Objdump  反汇编    很有用

 

Fopen: 返回值    成功  FILE *  失败  NULL

地址   分配  在堆上  malloc

 

Fclose ();  关闭文件

参数;   fopen  成功的返回值

1 free()  

刷新缓冲区

 

Fputc  ->  缓冲区    ->  文件名

 

如果不用fclose 不用exit   

写      减小系统调用次数

直接用_exit()

 

Fgetc();  从文件中获取一个字符     二进制文件a.out

参数1 fopen  的成功返回值

返回值  字符的ASCII 码    三个数就是一个整型

FILE *fp;

Fp = fopen("abc","r");

If (fp ==NULL)

Ch= fgetc(fp);

Read(fd,buf,1);   失败  EOF  -1

Fputc();  将字符写入到文件中

参数1  字符

参数2  fopen   成功之后返回值

 

重要fgets   从文件中获取字符串   buf 足够大

如果buf较大   fgets 会从文件中获取一行   mygetline

结果  文件  + \n + \0   

参数 1 buf

参数 2 size

     3 FILE *fopen 成功的返回值

fgets(buf,sizeof(buf),fp);

 

最多获取sizeof (buf)-1 

返回值  成功返回参数1, 失败NULL

Memset  (buf,'a',sizeof(buf))

最后有'\0'

 

Fputs  将字符串输出到文件里

Fputs()  参数1:地址  (字符串起始地址)

        参数2 fopen成功的返回值

提示:大一些

 

Fread()  参数1  地址

        参数2  每次读几个

        参数次数

        参数4 fopen成功的返回值

结果:参数2*参数3      sizeof(buf)

返回值  成功  成功读取的次数  失败  0

Fread (buf,1,sizeof(buf),fp);

实际读到的字数     0   文件结尾

 

Fwrite()

      1 地址

      2  每一次写几个  

      3 次数

      4 fopen成功的返回值

Fwrite(buf,1,字节数,fp);

Mydiff file1 file2

Mycat   fgetc   gets    fread

Mycp    fgetc  fputc  fgets   fputs  fread  fwrite

 

Mydiff file1  file2

 

 

第三章

Open()  read()  write()  lseek()  close()  dup  dup2   fcntl  ioctl

第四章  

Stat()  fstat() lstat() 获取  chmod修改

Chown()  truncate() opendir()  readdir()  closedir()  mkdir  rmdir

Readdir  syslink()  

第五章

Fopen  fclose  fgetc  fputc  fgets   fputs   fread  fwrite

第六章

Getpwuid  getgrgid

第七章

进程环境 内存分步

设置环境变量  getenv   setenv

PATH:  进程表   信号

Main.c 并发

结束进程     return exit 刷新  _exit 不刷新

内存分步  可用  用了多少

第八章

创建进程  

Fork  vfork  区别

Vfork  + exec  执行新

共用同一数据区,快,东西小

Fork  相对独立,创建子进程

父进程与子进程区别

继承:数据段,文本段   a, for 已经打开的文件描述符

 

Fork()  

返回值   在父进程中返回子进程pid

在子进程中返回0

Pid = fork();  一式两份

创建n个进程

A.out a.out a.out a.out 

B.A.out 

C.A.out 

D.A.out 

E.A.out

F.A.out

G.A.out

每个进程做不同的东西

谁先结束  父子进程

父进程先结束   子进程?守护 init

子进程先结束  

Wati()   1 清理僵尸

        2 协调进程

执行现有的功能   exec

     Ececl ("/bin/ls","ls","-l",NULL);

Execl()

Execv();

Execlp();

Execvp();

Execle();

Execve()

 

 

Char *cmd_argv[]={"ls","-l",NULL};

Execv("/bin/ls",cmd_argv);

Execlp("ls","ls","-l",NULL);

Char *cmd_argv[]={"ls","-l",NULL};

Execvp(cmd_argv[0],cmd_argv);          shell

 

 

posted @ 2013-03-24 22:25  王井玉  阅读(322)  评论(0编辑  收藏  举报