驱动学习日记2--文件操作系统调用

1.创建

    int create(const char *filename,mode_t mode);

    mode指定新建文件的读取权限

2.打开

    int open(const char* pathname,int flags);       int open(const char* pathname,int flags,mode_t mode);

    pathname是我们要打开的文件名(包含路径名称,缺省认为在当前路径下面)flags可以是下表的形式:

                O_RDONLY 只读打开    O_WRONLY 只写打开     O_RDWR 读写方式打开 (前三个只能三选1) O_APPEND 追加方式打开

                O_CREAT 创建一个文件   O_NOBLOCK 以非阻塞方式打开    O_TRUNC  如果文件已经存在,则删除文件内容

    mode访问权限:

                标志表示太麻烦,用5个数字表示   第一位表示设置用户ID  ,第二位表示设置组ID  , 第三位用户自己的权限位 , 第四位表示组的权限 , 第五位  其他人权限。

               1 执行  2 写  4 读 (可组合)   eg . 10 705

               1(设置用户ID)  ,0(不设置组ID),7(1+2+4,读写执行),0(没有权限),5(读执行)

3.读写

    int read(int fd,const void *buf,size_t length);

    int write(int fd,const void *buf,size_t length);

    参数buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。函数read()现从文件描述符fd所指定的文件中读取length个字节到buf缓冲区中,返回实际读取的字节数。write()过程反过来。

4.定位

    int lseek(int fd,offset_t offset,int whence);

    lseek()将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。whence可以取以下值:

          SEEK_SET:相对文件开头   SEEK_CUR:相对文件读写指针的当前位置   SEEK_END:相对文件末尾

          eg.    lseek(fd,0,seek_end);  返回值是文件的长度。

5.关闭

    int close(int fd);


例子:

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#define LENGTH 100
main()
{
    int fd,len;
    char str[LENGTH];
    /*创建打开一个文件*/
    fd=open("hello.txt",O_CREAT|O_RDWR,00700);
    if(fd){
        /*向文件写入"hello world"*/
        write(fd,"hello world",strlen("hello world"));
        /*关闭文件*/
        close(fd);    
    }
    /*打开文件*/
    fd=open("hello.txt",O_RDWR);
    /*读取文件*/
    len=read=(fd,str,LENGTH);
    str[len]='\0';
    printf("%s\n,str");
    /*关闭文件*/
    close(fd);
}

               





   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章