淘先锋技术网

首页 1 2 3 4 5 6 7

在C中可以利用函数open , read, write, close来实现对文件的打开, 读写, 关闭的操作

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

int main(void)
{
        int fd = -1; 
        ssize_t size = -1; 
        unsigned char buf[10] = {0};
        char filename[] = "test.txt";
        char buf1[] = "this is a test!";
        int i = 0;

        fd = open(filename, O_RDWR);/*打开文件*/
        if( -1 == fd) {
                printf("Open file %s failure, fd:%d\n", filename, fd);
        } else {
                printf("Open file %s success, fd:%d\n", filename, fd);
        }   

        while(size){
                size = read(fd, buf,10);/*读出文件中的10个字符*/
                if(-1 == size) {
                        close(fd);
                        printf("read file erro occurs\n");
                        return -1; 
                } else {
                        if(size > 0) {
                                printf("read %ld bytes:", size);
                                printf("\"");
                                for(i = 0; i < size; i++){
                                  if(*(buf+i) != 0x0a)
                                  printf("%c", *(buf + i));
                                }
                                printf("\"\n");
                                bzero(buf, 10);/*每次使用完buf,清空。可以保证对下次的使用没有干扰*/
                        } else {
                                printf("reac the end of file\n");
                        }
                }
        }
        size = write(fd, buf1, strlen(buf1));
        printf("write %ld byted to file\n", size);
        close(fd);
        return 0;
} 

在文件test.txt中写入一行数子1122334455667788

执行结果

kayshi@ubuntu:~/code/file$ ./file 
Open file test.txt success, fd:3
read 10 bytes:"1122334455"
read 7 bytes:"667788"
reac the end of file
write 15 byted to file
kayshi@ubuntu:~/code/file$ 

执行完后test.txt中的信息

1122334455667788
this is a test!

注意:1. read函数会把文件中的所有内容当做一行来处理,如果文中有换行符,就会把换行符当做一个字符。这就是上面的第二次读的时候,其实只剩了6个字符。却读出7个。这是因为有一个是换行符。ascii码为0x0a ,我在代码中,做了处理,如果是换行符就不打印。
2. 使用write函数向文件中写入数据,再读的时候结尾是没有换行符的。第一行有换行符,应该是编译器自带的功能