zoukankan      html  css  js  c++  java
  • apue 20130323

    Rm  myhead.c swp   异常中断  

    Return ;

    读到文件尾   少打一个加一个=

    Atoi(argv[1]+1);  

    练习:编写一个函数获取文件一行

    Open  read  write  close

     

    Lseek();    修改文件偏移量,修改哪一段   

    影响下一次读写操作   

    参数1open()成功返回值 

    参数2:偏移量   +1  0  -1  [ ]偏移量  +前,-后,0当前

    参数3:位置   SEEK_SET  (文件开始)

                 SEEK_CUR (文件当前)

                 SEEK_END(文件末尾)

    将文件第一个字符打印5次    read从上一次开始读

    Lseek(fd,0,SEEK_SET);      文件开始

            +1  第一个

    Lseek(fd,-1,SEEK_CUR);      很有用

    Open()回到文件开始     打开,读写,关闭   

     

    Read();   一次读出很多行     mygetline(){read();  lseek()}

     

    Fd= open(fd, O_RDONLY);

    Bzero(buf,sizeof(buf));

    Ret = read(fd,buf,sizeof(buf)-1);

    P=buf;

    While ((tmp=strchr(p,'\n'))!=NULL)

    {}

    Mygetline(int fd,char *buf,int size);限制边界

    Read (fd,buf,size);

    Lseek(fd,-)80-2,SEEK_CUR);    回车是文件的一部分

     

     

    Int mygeline(int fd, char *buf, int size)

    {

    Int ret;l

    Char *p;

    Bzero(buf,size);

    Ret = read(fd,buf,size);

    P=strchr(buf,'\n');

    P++;

    Bzero(p,ret-(p-buf));

    Lseek(fd,-(ret-(p-buf)),SEEK_CUR);

    return (p-buf);

    }

     

    Write();内存数据写到文件里。

    提示:open(,O_WRONLY|

    O_RDWR);

    n行的菱形输出到文件里            如果文件不存在     

    Fd = open("abc",)   文件名    O_WRONLY  |   O_TRUNC   |    O_CREAT,   0666    八进制,    二进制描述不了

    Write();   也修改偏移量

    目录文件上限    空间大小

    参数1open()成功的返回值

    参数2:地址

    参数3:大小      内存———》文件里

     

    Fd = open("abc",O_WRONLY | O_TRUNC | O_CREAT, 0666);

    Write(fd," ",1);

    Close(fd);

     

     

    Write(fd,"hello",5);   write不写回车,没有   "hello"

    Int i;

    For ()

    Close(fd);

    Od  -c  abc  什么东西

     

    Write();  部分写入   cp

    Open();

    Open();

    While(1)

    {

    Ret = read(fdr,buf,sizeof(buf));   1024

    判断= write(fdw,buf,ret);        50

    }

    Close();

    Close();

    剩下的时间不够了      部分写入

     

    提高:带权限    mytt abc  bcdef   file

    lseek定位     对文件内容重写

     

    文件修改:

    修改buf,很大

    1,将文件读入内存

    2,修改内存中的内容

    3,将内存中的全部信息写回到文件中

    4,文件变大变小?改变文件大小

     

    Uesername   :passwd  (16+20)

    Abc:1234  修改方便

    读记录信息    read(fd,  buf, 36);

    Read(36);   写回行首,不需要重写全部文件

    Lseek(-36);

    Write(,36);

    Myuseradd  username  cp /etc/passwd    

    判断   ->     拷贝到当前用户下

     

    改内容:

    1,重写

    2,扩展空间;   

     

    Open();   read();    write();    lseek();   close();

     

    Dup()   dup2()   fcntl()    ioctl()

     

    Fcntl:

    1,修改很多东西

    2,对文件上锁   用处不是很大

    Fcntl  改变文件状态标志(不关闭时)

     

     

    Dup()  dup() ;     文件描述的复制,两个记录指向同一文件

    1,重定向

    2,保存命令结果

     

    Dup()

    Int fd;

    Int savefd;

     

    Savefd=dup(1);

     

    Write(1,"hello\n",6);

    Write(savefd,"hello\n",6);                参数不同,功能不同

    两个文件描述符指向同一文件

    savefd=dup(1);      新的文件描述符

    Prnitf (" ");  3  当前最小的文件描述符

     

    Dup2()   

    参数1     参数2  

    如果参数2已经被打开,先关闭,(没有关系)

    Int fd;

    Fd = open("abc",O_WRONLY  |   O_TRUNC  |  O|CREAT, 0666);

    Dup2(fd,1);

    Write (1,  "hello\n",6);

    0    stdin

    1     stdout 

    2     stderr

    Fd 3 abc  

    Dup2(fd,1);

     

    hello 字符串,在屏幕上输出一下,现输出到文件中?

    先输出文件,再在屏幕上输出hello

     

    Int savefd;

    Savefd = dup(1) ;

     

    Printf ("hello");

    Fflush(NULL);

    Write(1,"hello\n",6);

     

    Dup2(1,savefd);

    Dup2(savefd,1);   恢复

     

    保存结果:

    Dup2(fd,1);

    Printf ( " ");

    Fflush(NULL);

     

    Dup2(savefd,1);

    Printf ("");           ls->abc    重定向

     

    Fork();

    {

    Fd = open();

    Dup2(fd,1);

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

    System(ls);  ->   printf ("")    

    }

     

    POSIX:   系统调用

    ANSI:   库函数

     

    练习:将图形的练习使用dup2,输出到文件中.

    1024 2048  4096

     

    1myuseradd  username ---.>写   passwd

    2mytt   abcd  bc   file    文件读写修改

     

    嵌入式web

      普通文件->  html   网页      在文件里头尾加东西

      实际修改三个文件  一个目录   

    /etc/shadow

    /etc/groud       属于一个组

    /etc/passwd

    Home  名字

     

    Int mygetline (int fd,char *buf, int size)

    {

    Int ret;

    Char *p;

    Bzero(buf,size);

    Ret = read(fd,buf,size-1);

    If (ret<=0)   return ret;

    P = strchr(buf,':');

    If (p==NULL)  return ret;

    P++;

    Bzero(p.ret-(p-buf));

    Lseek(fd,)

    }

     

    Spirntf ("%s:x:%d:%d:/home/%s:bin/bash");

    Write();

     

    文件属性,目录

    文件属性:获取文件属性?设置修改文件属性

    Stat();    获取文件属性

    文件类型不能修改

    Ls  -l

    -rw-rw-rw-  /root root  203   时间   a.c

    类型

    目录的操作

    Opendir()    readdir()      closedir()

    文件属性的设置

    Chmod   link  chown    chgrp    atime

    Truncate    rename

    (改变文件大小)

    练习:  

    Ls   -l  -S   目录/文件    ls  -l  a.c

    提高:

    Mycp    复制链接文件,目录

    比较两个目录是否一样

    提高:目录包括子目录

    编写程序:统计指定目录中所有.c文件的行数

    包括子目录

     

    递归  n!快速排序   树

    递归的深度

    1,终止条件

    2,功能

    3,自己调用     根/dev   (没有大小)主设备号:驱动   从设备号:驱动下

    Linux  文件类型   - (touch创建) d  l   b  c  p(也没有大小内核)  s

    每个进程4G    

     

    Stat();

    Const char *;

    参数1:文件名,  open    一样

    参数2:保存文件属性(地址)

           Struct stat;  (结构体)

    返回值:成功失败 -1  perror

     

    Struct stat *info=NULL;4个字节

    Struct stat  info;

    Ret=Stat ("abc",&info);

    If (ret <0)

    Goto stat_err;

     

    Printf ("%d %s\n",info.st_size,"abc");

     

    Echo  " "  >  abc

     

    问题:1,文件类型

          2,文件权限  

          3,uid转为名字   用户名  getpwuid

          4,gid转为组名称赞  vi /etc/groud   getgrgid

          5,时间   月,,小时,分钟.  Ctime

                      秒数转时间

      Printf ("%d ",info.st_ctime);   ->时间

    Struct passwd  *getpwuid(uidt_uid);

    Pirntf ("%.12s",);   12

    Printf ("-");文件类型

     

     

    目录操作:

    Opendir();   打开目录文件;  (文件名)

    Readdir();   获取目录文件中的一条记录

    Closedir();   关闭目录文件

     

    Opendir():参数:目录名字   "."当前路径 ".."当前上一级

    返回值  成功DIR * 失败  NULL

    Readdir();参数:opendir()成功的返回值

    返回值成功:struct dirnet * 

    失败:NULL

     

    (文件名)  d_name  我们关注的   数组长度

    Closedir();关闭目录文件

    参数:opendir  成功的返回值

    Dp = opendir(".");

    DIR *dp;

    While (1)

    {

    Dir = readdir();

    Printf ("%s\n",dir->d_name);

    Readdir();

    }   

    Struct dirent *dir;  closedir();

     

     

     

     

  • 相关阅读:
    Python自动化开发从浅入深-进阶(Twisted、Reactor)
    Python自动化开发从浅入深-进阶(socketServer)
    Python自动化开发从浅入深-进阶(select,poll,epoll学习)
    Python自动化开发从浅入深-进阶(进程)
    Python自动化开发从浅入深-语言基础(一些心得)
    Python自动化开发从浅入深-语言基础(常用模块)
    PSSH 批量管理服务器
    linux常用命令大全
    Why is 0[0] syntactically valid in javascript?
    免费为王(一)
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/2977808.html
Copyright © 2011-2022 走看看