Linux系统编程学习01

1.GCC使用

gcc -E hello.c -o hello.i
gcc -c hello.i -o hello.o
gcc -

2.GDB使用

常用命令:

 1. list(l) 显示附近代码
 2. next(n)   执行下一条命令
 3. print(p)  打印变量或语句
 4. backtrace(bt)   显示函数栈
 5. finish  退出函数
 6. break  添加断点
 7. info break  查看断点信息
 8. enable break-num  使断点可用
 9. enable 使所有断点可用
 10. delete  删除所有断点
 10. delete break-num  删除一个断点
 11. enable delete num  使该断点在命中一次后删除
 12. enable count hit-times break-num  使该断点在命中hit-times次后删除
 13. local  打印当前函数的局部变量

3.MakeFile

概念:将编译和链接要执行的命令按照一定的顺序写进一个文件里
执行make的时候会以最终生成的目标文件为根节点遍历执行所有的编译命令

4.文件IO

1.基本API
1. `int open(const str * filepath, int oflag, [...,mode_t mode])` (sys/types.h  sys/stat.h  fcntl.h)
    filepath--文件路径
    oflag--打开方式
        O_WRONLY  只写方式
        O_RDWR  读写方式
        O_APPEND  追加方式
        O_CREAT  不存在就创建,需要添加第三个参数,指明访问权限
        O_EXCL  如果同时指定O_CREATE ,则文件存在时报错,可用于测试文件是否存在
    mode--访问权限
2.`ssize_t read(int fd, void *buf, size_t count)`(unistd.h)
    fd--需要读取的文件的文件描述符
    buf--得到的数据存储的位置
    count--读取的大小
    返回读取的数据的大小,出错返回-1
3.`write(int fd, const void * buf, size_t count)`(unistd.h)
    fd--需要写入的稳健
    buf--需要写入的数据
    count--写入的数据的大小
    返回写入的数据的大小,出错返回-1
4.`close(int fd)`(unistd.h)
5.`lseek(int fd, int offset, int whence)`(sys/types.h   unistd.h)
    fd--操作的文件
    offset--偏移量
    whence--相对哪个位置的偏移量
        SEEK_SET
        SEEK_CUR
        SEEK_END
6.`int select(int maxfd, fdset *read_set, fdset *write_set, fdset *excep_set, struct timeval *timeout)`(sys/select.h) 失败返回-1,成功返回所有有变化的描述符的个数,超时返回0
    maxfd--检测个数
    read_set--输入描述符个数
    write_set--输出描述符个数
    excep_set--异常描述符个数
    timeout--超时时间,NULL表示无限长直到检测到消息
    **配套函数(调用之前所有监控的描述符都要置1,返回时就绪的会被置1,否则清0)**
        FD_SET(fd, fdset *)  置1
        FD_ISSET(fd, fd_set *)  是否置1
        FD_ZERO(fdset *)  清0
        FD_CLR(fd, fdset *) 置0
7.`int stat(const char * filepath, struct stat * buf);`(sys/types.h  sys/stat.h  unistd.h)成功返回0,失败返回-1
    struct stat {
                dev_t       st_dev;
                ino_t       st_ino;//节点号
                mode_t      st_mode;//文件类型
                nlink_t     st_nlink;//硬链接数([Linux的硬链接和软链接](http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html))
                uid_t       st_uid;//属主用户
                gid_t       st_gid;//所属组
                dev_t       st_rdev;
                off_t       st_size;//大小
                blksize_t   st_blksize;
                blkcnt_t    st_blocks;
                time_t      st_atime;//最后访问时间
                time_t      st_mtime;//最后修改的时间
                time_t      st_ctime;//创建时间
    }
8. `struct dirent* readdir(DIR * dir)`成功返回dirent结构体,失败返回NULL
    struct dirent {
       ino_t   d_ino;
       off_t   d_off;
       unsigned short  d_reclen;
       unsigned char   d_type;
       char    d_name[256];
    };
9. `int closedir(DIR * dir)`成功返回0, 失败返回 -1

5. 多进程编程

1、Linux进程状态
    R
    S
    D
    T
    Z
    X
2、Linux下C进程内存布局
    text
    initialized data
    malloc
    stack
3、`int exec(const char * pathname, const char * arg0...)`
exec:传入一个参数,用新的程序来替代原来子进程中的正文、数据、堆和栈,失败返回-1,成功永不返回
4、fork:调用一次返回两次,子进程返回0,父进程返回子进程的进程id,失败返回-1,子进程会复制父进程的正文、数据、堆、栈。
5、多进程的调试:
            1. 在子进程开始的地方加上sleep(20)
            2. 查看子进程的pid,使用gdb pid再开一个调试程序
            3. 用break添加断点
            4. 用continue继续
            5. 等待睡眠结束
6、Exit Handler
    处理进程退出后的事宜,注册方式有两种
    atexit(void (*func) (void))
    on_exit(void (*func)(int, void*))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值