文件读写/创建

 

例1: 用read()/write()从终端读取数据并输出到终端

myrw.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc,char *argv[])
{
    char buf[1000];

    int ret = read(0,buf,1000);

    write(1,buf,ret);

    return 0;
}

编译链接运行, 键盘输入一些字符再回车后, 结果输出如下:

 

例2: 用lseek(), 将文件内容从尾到头打印输出

mylseek.c

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>

#define ERROR(flag)                     \
     if(flag)                        \
    {                                \
        printf("%d: ",__LINE__);    \
        fflush(stdout);                \
        perror("error");            \
        exit(errno);                \
    }

int main(int argc,char *argv[])
{
    int fd = open(argv[1],O_RDONLY);
    ERROR(fd == -1);

    int end = lseek(fd,0,SEEK_END);

    char ch;
    
    while(end--)
    {
        lseek(fd,end,SEEK_SET);
        read(fd,&ch,1);
        write(STDOUT_FILENO,&ch,1);
    }
    close(fd);
    return 0;
}

编译/链接执行, 输出结果如下:

 

例3: 创建文件

myopen.c

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>


#define ERROR(flag)                 \
     if(flag)                \
    {                    \
        printf("%d: ",__LINE__);    \
        fflush(stdout);            \
        perror("error");        \
        exit(errno);            \
    }

#define MODE (S_IRWXU | S_IRWXG | S_IROTH)
#define FLAGS

int main(int argc,char *argv[])
{
    int mask = umask(0);

    //int fd = open(argv[1], O_RDWR | O_CREAT, MODE);
    int fd = creat(argv[1], 0777);
    ERROR(fd == -1);

//    umask(mask);

    close(fd);

    return 0;
}

编译链接运行, 结果如下: 

 

将myopen.c文件中的creat(...)注释掉, 启用open(...)部分, 编译执行后的输出结果如下:

比较前后结果不同, 重新创建的文件12345的文件属性不同.

 

将myopen,c文件中的umask(...)注释掉, 编译执行后输出结果如下:

其中, 注释掉umask(...)后, 创建文件的mode参数为0777, 但实际文件的却是775, 原因是前面的umask(0)起作用了. umask默认值是0002

 

posted @ 2016-01-10 21:09  zhanglong71  阅读(221)  评论(0编辑  收藏  举报