Linux中C语言文件操作

在linux下,一切皆文件。

通常在进程启动时候,都会打开三个文件—–标准输入、标准输出和标准出错处理。
这三个文件所对应的文件描述符分别是0,1和2。
对应的宏是:
STDID_FILENO==0
STDOUT_FILENO==1
STDERR_FILENO==2
所以用户在打开新的文件时候,返回的文件描述符一般是从3开始的。

不带缓存的IO操作主要使用下面6个函数:
create:创建新文件
open:打开文件
read:读取已经打开的文件内容
write:向已经打开的文件写入内容
lseek:用于移动文件的读写位置
close:关闭已经打开的文件

这六个函数所需要的头文件是:

#include
#include
#include
#include
#include

创建Demo:

#include
#include
#include
#include
#include

void create_file(char *filename)
{
    int fd;
    fd = creat(filename,0755);
    if(fd < 0)
    {
        // printf("fd = %d \n", fd);
        printf("create file failure \n", fd);
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("create file success!\n");
    }
}

int main(int argc, char *argv[])
{
    int i;
    if(argc < 2)
    {
        printf("you don't input file name!\n");
        exit(EXIT_FAILURE);
    }
    for(i=1; i < argc; i++)
    {
        create_file(argv[i]);
    }
    exit(EXIT_SUCCESS);
}

测试代码:

gcc -o create_file create_file.c
./create_file ../tete.txt  //表示在父目录新建文件

打开Demo:

#include
#include
#include
#include
#include

int main(int argc, char * argv[])
{
    int fd;
    if(argc < 2)
    {
        puts("No input file name! \n");
        exit(1);
    }

    fd = open(argv[1], O_CREAT|O_RDWR, 0755);
    if(fd < 0)
    {
        perror("open file failure! \n");
        exit(1);
    }
    else
    {
        printf("open file %d success! \n", fd);
    }

    close(fd);
    exit(0);
}

把一个文件的内容复制到另一个文件中区(Demo):

#include
#include
#include
#include
#include 

#define BUFFER_SIZE 1024


int main(int argc, char *argv[])
{
    int from_fd,to_fd;
    long file_size = 0;
    int ret = 1;
    char buffer[BUFFER_SIZE];
    char *ptr;

    if(argc != 3)
    {
        fprintf(stderr,"Usage: %s fromfile tofile \n", argv[0]);
    return -1;
    }

    from_fd = open(argv[1],O_RDONLY);
    if(from_fd < 0)
    {
    fprintf(stderr,"Open %s \n", argv[1]);
        return -1;
    }

    to_fd = open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR); 
    if(to_fd < 0)
    {
    fprintf(stderr,"Open %s \n", argv[2]);
        return -1;
    }   

    file_size = lseek(from_fd,0L,SEEK_END);
    lseek(from_fd,0L,SEEK_SET);
//    printf("form file size is %ld\n",file_size);


    while(ret)
    {
    ret= read(from_fd, buffer, BUFFER_SIZE);
    if(ret == -1)
    {
        printf("Read Error! \n");
        return -1;
    }

    write(to_fd, buffer, ret);
    file_size -= ret; 
    //bzero() 会将内存块(字符串)的前n个字节清零
    //s为内存(字符串)指针,n 为需要清零的字节数
    bzero(buffer,BUFFER_SIZE);

    }

    close(from_fd);
    close(to_fd);
    return 0;
}

仅当做笔记。

你可能感兴趣的:(Linux)