首页 > 学院 > 开发设计 > 正文

Linux系统编程学习01

2019-11-14 13:06:29
字体:
来源:转载
供稿:网友

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--读取的大小 返回读取的数据的大小,出错返回-13.`write(int fd, const void * buf, size_t count)`(unistd.h) fd--需要写入的稳健 buf--需要写入的数据 count--写入的数据的大小 返回写入的数据的大小,出错返回-14.`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_END6.`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 *) 置07.`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.VEVb.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 X2、Linux下C进程内存布局 text initialized data malloc stack3、`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*))
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表