zoukankan      html  css  js  c++  java
  • Linux系统编程

    1. 什么是Linux系统编程

    Linux系统编程也叫Linux下的高级编程;

    学习Linux系统编程C语言是基础,能够在Linux系统下通过指令完成文件的创建、复制、剪切、删除;文件夹的创建和删除;软件的下载和安装就可以。

    Linux系统编程主要是学习Linux系统调用的接口,学习这些接口的功能、参数和返回值,是比较简单的。可以通过框架学习法来学习。(迅为的框架学习法)

    2. Linux系统编程的基本框架

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[])
    {
        //argc:表示的是命令行中参数的个数。最小为1
        //argv:表示的是命令行中的参数。
    
        printf("argc = %d 
    ",argc);
    
        for(int i=0;i<argc;i++)
        {
            printf("argv[%d] = %s 
    ",i,argv[i]);
        }
    
        return 0;
    }

    3. 标准IO和文件IO

    文件IO就是直接调用系统内核提供的系统调用函数,如open;

    标准IO就是间接调用系统调用函数,是C库函数,如fopen。

    文件IO和标准IO的区别?

    文件IO是直接调用系统内核提供的系统调用函数,头文件是unistd.h;标准IO是间接调用系统函数,头文件是stdio.h

    文件IO是依赖于操作系统的;标准IO是不依赖于操作系统的。所以在任何操作系统下,使用标准IO,也就是C库函数操作文件的方法都是相同的。

    4. 文件IO之open函数

    文件描述符

      对于文件IO来说,一切都是围绕文件描述符进行的。在Linux系统中,所有打开的文件都有一个对应的文件描述符。

      文件描述符的本质是一个非负整数,当我们打开一个文件时,系统会给我们分配一个文件描述符。

      当我们对一个文件做读写操作的时候,我们使用open函数返回的这个文件描述符会标识该文件,并将其作为参数传递给read或write函数。 

      在posix.1应用程序里面,文件描述符0,1,2分别标识标准输入,标准输出和标准出错。

    open函数

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);

    功能:打开文件,返回文件描述符。

    open函数有两个原型,参数不同。

    第一个参数:表示要打开文件的路径。

    第二个参数:O_RDONLY,O_WRONLY,O_RDWR。O_CREAT等等。可以通过 | 组合使用

    第三个参数:当第二个参数中有O_CREAT时,需要填写第三个参数,表示访问权限。文件实际的访问权限:  mode & ~(umask)

    返回值:正常返回打开文件的描述符;-1:打开错误

    文件的访问权限

    文件的访问权限可以由数字表示:
    可执行 -- 1 可写 -- 2 可读 -- 4

    如果我们表示文件可读可写,就是上述值的和,可读可写 -- 6。

    open.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    int main(int argc,char *argv[])
    {
    
        int fd;
    
        fd = open("a.c",O_CREAT|O_RDWR,0666);
    
        if(fd < 0){
            printf("open is error!
    ");
        }
    
        printf("fd = %d 
    ",fd);
    
        close(fd);
    
        return 0;
    }

     

    umask 是 022 ,open第三个参数是 666 ,mode & ~(umask) = 644

    5.文件IO之close函数

     

    close函数

    #include <unistd.h>
    
    int close(int fd);

    作用:关闭一个文件描述符

    参数:文件描述符

    返回值:0-成功   -1-失败。

    为什么要关闭文件描述符?

    系统中的文件描述符是有上限的,一般为1024。关闭不用的文件描述符以让内核可以重用。

    6.文件IO之read函数

    read函数

    #include <unistd.h>
    
    ssize_t read(int fd, void *buf, size_t count);

    作用:读出文件描述符fd所指向的文件中,count字节的数据到buf指向的缓冲区。

    参数:  fd:文件描述符

         buf:读出数据的缓冲区

         count:要读出数据的字节长度

    返回值:n - 实际读取到数据的字节长度

        0 - 读到文件末尾

        -1 - 读取出错 

    read.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    
    int main(int argc,char *argv[])
    {
        int fd;
        char buf[32];
        ssize_t ret;
    
        fd = open("a.c",O_RDWR);
        if(fd < 0)
        {
            printf("open is error
    ");
            return -1;
        }
    
        printf("fd is %d
    ",fd);
    
        ret = read(fd,buf,32);
        if(ret < 0)
        {
            printf("read is error
    ");
            return -2;
        }
    
        printf("buf is %s
    ",buf);
        printf("ret is %d
    ",ret);
        
        close(fd);
    
        return 0;
    }

  • 相关阅读:
    Java中的Java.lang.ThreadLocal类
    Java中线程的生命周期和状态
    Circular Linked List数据结构
    Linked List数据结构
    JVM如何工作
    JVM运行时数据区域
    queue数据结构
    stack数据结构
    Java中Set/HashSet的内部处理
    POJO,JavaBean 以及他们之间的区别
  • 原文地址:https://www.cnblogs.com/doitjust/p/14644680.html
Copyright © 2011-2022 走看看