文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>文件编程总结(系统调用)

文件编程总结(系统调用)

时间:2010-07-28  来源:冰蓝血

文件创建: int creat(const char *filename, mode_t mode) filename即为将创建的文件的路径加文件名,如直接给出文件名则在当前目录下创建该文件,mode为创建模式常见的有: S_IRUSR(可读,数字1表示)、S_IWUSR(可写,数字2表示)、S_IXUSR(可执行,数字4表示)、S_IRWXU(可读、写、执行) 返回值小于0表示创建失败。   文件打开: A)   int open(const char *pathname, int flags) B)   int open(const char *pathname, int flags, mode_t mode) pathname为将打开的文件的路径,flags为打开标志,常见标志有: O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)、O_APPEND(追加方式)、O_CREAT(创建方式)、O_NOBLOCK(非阻塞方式) 如果使用了O_CREAT标志,则函数原型如B)所示,mode为创建模式。返回文件描述符(对应打开文件的一个整型数)   文件关闭: int close(int fd)  fd为文件描述符     文件读取: int read(int fd, const void *buf, size_t length) 从文件描述符fd指定的文件读取length个字节到缓冲区buf中,返回值为实际读取的字节数   文件写入: int write(int fd, const void *buf, size_t length) 将缓冲区buf中的length个字节写入到fd所指向的文件中,返回值为实际写入的字节数。   文件定位: int lseek(int fd, offset_t offset, int whence) 将文件读写指针相对whence移动offset(取正值表示向后移动,取负值则表示向前移动)个字节。返回为文件指针相对文件头的位置 whence常见的值如下: SEEK_SET:相对文件开头 SEEK_CUR:相对文件读写指针的当前位置 SEEK_END:相对文件末尾
文件访问判断:
int access(const char *pathname, int mode)
pathname:文件路径,
mode:要判断的访问权限。可取如下值(可多个组合)
R_OK(文件可读)、W_OK(文件可写)、X_OK(文件可执行)、F_OK(文件存在)
测试成功时返回0,否则返回-1
 
实例程序(文件复制):
  #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
  #define BUFFER_SIZE 1024   int main(int argc,char **argv)
{
        int from_fd,to_fd;
        int bytes_read,bytes_write;
        char buffer[BUFFER_SIZE];
        char *ptr;
        if(argc!=3)
        {
                fprintf(stderr,"Usage:%s fromfile tofile/n/a",argv[0]);
                exit(1);
        }
        /* 打开源文件 */         if((from_fd=open(argv[1],O_RDONLY))==-1)
        {
                fprintf(stderr,"Open %s Error:%s/n",argv[1],strerror(errno));
                exit(1);
        }
        /* 创建目的文件 */         if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
        {
                fprintf(stderr,"Open %s Error:%s/n",argv[2],strerror(errno));
                exit(1);
        }
        /* 以下代码是一个经典的拷贝文件的代码 */         while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
        {
                /* 一个致命的错误发生了 */
                if((bytes_read==-1)&&(errno!=EINTR)) break;
                else if(bytes_read>0)
                {
                        ptr=buffer;
                        while(bytes_write=write(to_fd,ptr,bytes_read))
                        {
                                /* 一个致命错误发生了 */
                                if((bytes_write==-1)&&(errno!=EINTR))break;
                                /* 写完了所有读的字节 */
                                else if(bytes_write==bytes_read) break;
                                /* 只写了一部分,继续写 */
                                else if(bytes_write>0)
                                {
                                        ptr+=bytes_write;
                                        bytes_read-=bytes_write;
                                }
                        }
                        /* 写的时候发生的致命错误 */
                        if(bytes_write==-1)break;
                }
        }
        close(from_fd);
        close(to_fd);
        exit(0);
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载