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

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

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

路径

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

只读 方式打开文件

#include 
#include 
#include 
#include//错误号的头文件
#include//strerror()通过它可以打印出相应的错误信息
#include

#include
//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 
#include   //errno
#include   //strerror()  strlen()
#include   //close()  write()
/*open()*/
#include 
#include 
#include 

//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 
#include 
#include 
#include//错误号的头文件
#include//strerror()通过它可以打印出相应的错误信息
#include

#include
//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 
#include   //write()
#include    //errno
#include   //strerror()
/*open()*/
#include 
#include 
#include 

#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 
#include   //write()
#include    //errno
#include   //strerror()
/*open()*/
#include 
#include 
#include 

#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 
#include 
#include 
#include//错误号的头文件
#include//strerror()通过它可以打印出相应的错误信息
#include
#include
#include
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 
#include   //write()
#include    //errno
#include   //strerror()
/*open()*/
#include 
#include 
#include 

#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 internet)