美文网首页
系统 第一天:系统与网络脚本system and interne

系统 第一天:系统与网络脚本system and interne

作者: ie大博 | 来源:发表于2016-11-28 17:47 被阅读0次

    `- man 加 想要查询的东西,电脑会给出相应的解释

    • 作业:Linux和window可执行文件的格式是什么?
    • 作业:查一下FILE结构体

    路径

    • 绝对路径:以"/"开始的路径称之为绝对路径-->一般从根目录开始
    • 相对路径:以". /"开始的路径叫做相对路径-->当前目录的上一级目录。

    只读 方式打开文件

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include<errno.h>//错误号的头文件
    #include<string.h>//strerror()通过它可以打印出相应的错误信息
    #include<unistd.h>
    
    #include<stdio.h>
    //flag:O_RDONLY,O_WRNOLY,O_RDWR
    //int open(const char *pathname ,int flag);
    //使用flag制定打开的方式打开制定路径的文件
    //若文件打开成功,返回该文件的一个新的文件描述符
    //若文件打开失败,返回-1.
    int main(void)
    {
        int fd = -1;
        fd = open("stu.info",O_RDONLY);//以制度方式打开文件,若文件不存在,
        //不会自动创建文件,打开失败。该路径是相对路径。
        if (-1 == fd)
        {
            printf("open file failed....\n");
            printf("errno = %d\n",errno);
            //当打开失败是,会对errno设置错误值
            printf("error:%s\n",strerror(errno));
            //讲errno错误号所代表的错误信息一字符传的形式打印出来
        
        }
        else
        {
            printf("open file ok...\n");
            close(fd);//关闭文件描述符
        }
        return 0;
    }
    

    只写方式打开文件

    #include <stdio.h>
    #include <errno.h>  //errno
    #include <string.h>  //strerror()  strlen()
    #include <unistd.h>  //close()  write()
    /*open()*/
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    //fd: 要写入数据的文件描述符
    //buf: 要写的数据的首地址
    //count:要写多少个数据
    //size_t:失败时返回-1,成功是返回写入的数据字节数
    //size_t write(int fd, const void *buf, size_t count);
    
    int main(void)
    {
        int fd = -1;
        fd = open("stu.info", O_WRONLY | O_CREAT
                  , S_IRWXU | S_IWGRP | S_IROTH);
        if (-1 == fd)
        {
            printf("open file failed...\n");
            printf("error: %s\n", strerror(errno));
        }
        else
        {
            printf("open file ok...\n");
            int ret = -1;
            char caBuf[32] = "Hello World";
            ret = write(fd, caBuf, strlen(caBuf));//字符串用strlen
            if (-1 == ret)
            {
                printf("write error: %s\n", strerror(errno));
            }
            else
            {
                printf("write %d bytes to file\n", ret);
            }
    
            close(fd);
        }
    
        return 0;
    }
    
    

    创建文件

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include<errno.h>//错误号的头文件
    #include<string.h>//strerror()通过它可以打印出相应的错误信息
    #include<unistd.h>
    
    #include<stdio.h>
    //flag:O_RDONLY,O_WRNOLY,O_RDWR
    //int open(const char *pathname ,int flag);
    //使用flag制定打开的方式打开制定路径的文件
    //若文件打开成功,返回该文件的一个新的文件描述符
    //若文件打开失败,返回-1.
    
    int main(void)
    {
        int fd = -1;
        fd = open("stu.info",O_RDONLY);//以制度方式打开文件,若文件不存在,
        //不会自动创建文件,打开失败。该路径是相对路径。
        if (-1 == fd)
        {
            printf("open file failed....\n");
            printf("errno = %d\n",errno);
            //当打开失败是,会对errno设置错误值
            printf("error:%s\n",strerror(errno));
            //讲errno错误号所代表的错误信息一字符传的形式打印出来
            if(2 == errno)
            {
                fd = creat("stu.info",S_IRUSR | S_IWUSR | S_IRGRP |S_IROTH);
    //创建stu.info这个文件,它的权限是后面的东西。
        //S_IRUSR  00400 user has read permission
        // S_IWUSR  00200 user has write permission
        // S_IRGRP  00040 group has read permission
        // S_IWOTH  00002 others have write permission
                if(-1 == fd)
                {
                    printf("error = %s\n",strerror(errno));
                    return -1;
                }
                else
                {
                    printf("create file ok\n");
                }
            }
            else
            {
                
                printf("error = %s\n",strerror(errno));
            }
        }
        close(fd);//关闭文件描述符
        
        return 0;
    }
    

    循环写入

    #include <stdio.h>
    #include <unistd.h>  //write()
    #include <errno.h>   //errno
    #include <string.h>  //strerror()
    /*open()*/
    #include <syspes.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #define PER_WRITE_BYTES 4096
    
    int myOpen(const char *pathname)
    {
        int fd  = -1;
        if (NULL != pathname)
        {
            fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC
                      , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
            if (-1 == fd)
            {
                printf("open error: %s\n", strerror(errno));
            }
        }
        return fd;
    }
    
    int myWrite(int fd, char *pData, int iTotalSize)
    {
        //对形参的值进行有效性检查
        if (-1 != fd && NULL != pData && iTotalSize > 0)
        {
            int i = 0;
            //若数据量比较大是,write可能一次性写不玩
            //这种情况下,必须分多次循环的去写
    
            //剩余要写的字节数
            int iLeft = iTotalSize;
            
            //已写入的字节数
            int iWirted = 0;
            
            //写数据时的返回值,出错返回-1,
            //成功返回实际写入的字节数
            int ret = -1;
    
            //如果剩余的数据量大于等于PER_WRITE_BYTES
            //则指定该次写入文件的数据量为PER_WRITE_BYTES
            //否则指定为剩余的数据量:iLeft
            if (iLeft >= PER_WRITE_BYTES)
            {
                ret = write(fd, pData, PER_WRITE_BYTES);
            }
            else
            {
                ret = write(fd, pData, iLeft);
            }
            if (-1 == ret)
            {
                printf("write error: %s\n", strerror(errno));
            }
            else
            {
                printf("%d, write %d bytes to file\n", ++i, ret);
                //剩余数据量减去实际写入的数据量
                //得到新的剩余数据量
                iLeft -= ret;
    
                //已写的数据量加上实际写入的数据量
                //得到新的已写数据量
                iWirted += ret;
                //如果上次写入没有出错并且还有数据没写完
                //则循环接着写
                while (ret && iLeft)
                {
                    if (iLeft >= PER_WRITE_BYTES)
                    {
                        //指针往后偏移到未写的数据位置
                        //从该位置开始将数据写入文件
                        ret = write(fd, pData+iWirted
                                    , PER_WRITE_BYTES);
                    }
                    else
                    {
                        ret = write(fd, pData+iWirted
                                    , iLeft);
                    }
                    if (-1 != ret)
                    {
                        iLeft -= ret;
                        iWirted += ret;
                        printf("%d, write %d bytes to file\n"
                               , ++i, ret);
                    }
                    else
                    {
                        printf("write error: %s\n", strerror(errno));
                    }
                }
            }
        }
    }
    
    int main(void)
    {
        int fd = -1;
        fd = myOpen("test.data");
        if (-1 != fd)
        {
            char caBuf[4096789] = {'A'};
            myWrite(fd, caBuf, sizeof(caBuf));
            
            close(fd);
        }   
    
        return 0;
    }
    
    

    循环读

    
    
    
    
    #include <stdio.h>
    #include <unistd.h>  //write()
    #include <errno.h>   //errno
    #include <string.h>  //strerror()
    /*open()*/
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #define PER_WRITE_BYTES 4096
    
    int myOpen(const char *pathname)
    {
        int fd  = -1;
        if (NULL != pathname)
        {
            fd = open(pathname, O_RDONLY | O_CREAT 
                      , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
            if (-1 == fd)
            {
                printf("open error: %s\n", strerror(errno));
            }
        }
        return fd;
    }
    
    
    
    int main(void)
    {
        
    
    
        int fd = -1;
        fd = myOpen("test.data");
        if (-1 != fd)
        {
            char caBuf[32] = {'\0'};
            int ret = -1;
            ret = read(fd, caBuf, sizeof(caBuf));
            if (-1 != ret)
            {
                caBuf[ret-1] = '\0';
                printf("%s\n", caBuf);
            }
            else
            {
                printf("read error:%s\n", strerror(errno));
            }
    
            close(fd);
        }
    
    
        return 0;
    }
    
    

    结构体写入

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include<errno.h>//错误号的头文件
    #include<string.h>//strerror()通过它可以打印出相应的错误信息
    #include<unistd.h>
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct student
    {
        char name[20];
        int num;
        char sex[10];
        int score;
    }student;
    int main(void)
    {
        int fd = -1;
        fd = open("stu.info",O_WRONLY| O_CREAT, S_IRWXU|S_IWGRP|S_IROTH);
        if (-1 == fd)
        {
            printf("open file failed....\n");
            printf("errno = %d\n",errno);
            printf("error:%s\n",strerror(errno));
        
        }
        else
        {
            printf("open file ok...\n");
            int ret =-1;
            student  caBuf={"alex",100,"boy",81};
            ret = write(fd,&caBuf,sizeof(caBuf));//这个位置注意,&caBuf
            if(-1 == ret)
            {
                printf("write error:%s\n",strerror(errno));
            }
            else
            {
                printf("write %d bytes to file \n",ret);
            }
            close(fd);//关闭文件描述符
        }
        return 0;
    }
    

    写结构体

    
    #include <stdio.h>
    #include <unistd.h>  //write()
    #include <errno.h>   //errno
    #include <string.h>  //strerror()
    /*open()*/
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    #define PER_WRITE_BYTES 4096
    typedef struct student
    {
        char name[20];
        int num;
        char sex[10];
        int score;
    }student;
    int myOpen(const char *pathname)
    {
        int fd  = -1;
        if (NULL != pathname)
        {
            fd = open(pathname, O_RDONLY | O_CREAT 
                      , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
            if (-1 == fd)
            {
                printf("open error: %s\n", strerror(errno));
            }
        }
        return fd;
    }
    
    
    
    int main(void)
    {
        
    
    
        int fd = -1;
        fd = myOpen("stu.info");
        if (-1 != fd)
        {
        student stu;
        memset(&stu,'\0',sizeof(student));
            
            int ret = -1;
            ret = read(fd, &stu, sizeof(student));
            if (-1 != ret)
            {
                printf("name:%s,num:%d,sex:%s,score:%d\n",
    stu.name,stu.num,stu.sex,stu.score);
               // printf("%s\n", caBuf);
            }
            else
            {
                printf("read error:%s\n", strerror(errno));
            }
    
            close(fd);
        }
    
    
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:系统 第一天:系统与网络脚本system and interne

          本文链接:https://www.haomeiwen.com/subject/uqxopttx.html