14 |宇文拓>

尚未进行身份认证

我要认证

每天进步一点点

等级
TA的排名 13w+

Linux系统调用 - 文件IO复用 (poll 与 ppoll)

这两个系统调用的作用,是在指定的文件描述符上监听发生的任何文件事件,以便继续执行后续的文件IO操作。其作用与最古老的文件IO复用接口select差不多,但是poll没有最多1024个文件描述符的限制,因此适用的范围更大。而且,poll接口中使用的数据结构的组织更加直观,操作更加方便。说到select系统调用的1024个文件描述符的数量限制,完全是历史遗留的产物,因为在select系统调用被创建...

2019-04-18 23:26:13

Linux系统调用 - 获取文件状态 (stat, lstat和fstat)

获取文件状态的系统调用有三个,分别是stat,fstat和lstat,其实他们的作用是一样的,都是查询某个文件的状态。如果查询成功,会把文件状态的信息填充在一个stat结构体中。他们的函数定义分别如下:int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(con...

2018-11-18 22:13:21

Unity 5.x中使用Protobuf

哎,各种坑,总算整差不多明白了,放了一个github工程,把配套的protobuf-net源码,dll和生成工具都放一起了。 注意仔细读README,如果使用mono的,直接把dll放到工程的Plugins目录下就行了,要选择.net 2.0,不能用.net 2.0 subset。 如果要使用il2cpp的,需要把协议文件与protobuf-net for Unity的dll文件一...

2018-11-01 11:52:17

Unity的IOS导出工程配置工具xcodeapi

在把Unity打包成IOS安装包时,经常需要自动化设置导出工程的各项配置。在Unity 4.x时代,常用的工具是XUPorter,在Unity 5.x之后,Unity官方提供了另外一套工具,叫做xcodeapi,因为是官方维护的,所以在使用上可以更放心,所以推荐使用。xcodeapi的工程链接在Unity的开源bitbucket上:https://bitbucket.org/Unity-T...

2018-10-27 21:36:17

xcode 12.0 常见错误

- 错误'xxxx' is unavailable: not available in automatic reference counting mode在老版本的xcode上编译通过的工程,升级xcode到12.0之后,报错:'xxxx' is unavailable: not available in automatic reference counting mode。报错的代码长...

2018-10-27 20:57:10

mac开发常用设置

用惯了Windows和Linux,刚切换到mac系统会有各种不习惯,在这里记录一些mac使用的小技巧吧,内容会慢慢补充。- 设置命令别名这一点和Linux没有什么区别,都是在根目录下创建默认的shell配置文件,mac系统默认使用的shell应该是bash,所以创编辑文件 ~/.bash_profile (如果没有这个文件就创建一个), 在里面添加alias命令,注意shell的语法中,=...

2018-10-27 12:14:23

Linux系统调用 - shutdown

shutdown()系统调用的功能是关闭一个套接字的指定方向上的通信,函数原型:int shutdown(int sockfd, int how);参数how可以取的值分别为:SHUT_RD(关闭读取),SHUT_EW(关闭写入)和SHUT_RDWR(关闭读取和写入),其意义不言自明。这个函数也是遵照常规,成功执行之后会返回0,如果遇到错误,会返回-1,同时把错误原因设置到errno里...

2018-10-26 20:55:01

Linux系统调用 - close

Close

2018-10-23 23:08:05

Linux系统调用 - write

write()系统调用向指定的文件描述符内写入指定字节数的内容,函数原型:ssize_t write(int fd, const void *buf, size_t count);其中参数count表示最多写入的字节数,返回值表是真正写入的字节数。有些情况下返回值有可能会比指定的字节数要少,例如存储设备上没有空间了,或者写入的文件大小超过RLIMIT_FSIZE的限制了,或者写入过程被信号...

2018-10-11 19:29:05

Linux系统调用 - read

read()系统调用的原型:ssize_t read(int fd, void *buf, size_t count);功能:从指定的文件描述符中读取最多count个字节的数据到指定的buf中去。如果传入的count是0,这个系统调用什么都不干,直接返回0。如果指定的count大于0,而且返回值也大于0,则表示函数执行成功,返回值表示成功读取的字节数,同时被读取的文件的当前数据指针会相应后移。...

2018-10-09 22:57:15

Linux系统调用 - open

open() 系统调用很有可能是Linux开发者用到的第一个系统调用,它打开一个指定目录上的文件或设备,必要的时候会创建一个。函数原型:int open(const char *pathname, int flags, ...);其中的可选参数是在创建文件的时候指定新文件的模式。flags参数应该至少包含一个访问模式:O_RDONLY,O_WRONLY或者O_RDWR,分别表示文件是只读的...

2018-10-09 11:36:15

在Android真机上使用gdb单步调试

首先需要一台root过的手机,安装好BusyBox工具箱,并连接到一台配置好adb的调试PC。 1、从NDK的prebuild目录下找到对应手机平台的gdbserver,上传到手机,运行游戏,然后运行gdbserver --attach 127.0.0.1:6666 PID其中,PID是要调试的应用的进程ID,可以用top或ps命令查看。6666是要使用的端口号,手机上任意一个没有...

2018-09-28 17:27:01

Linux系统调用列表(CentOS 7 64bits)

本系列计划把Linux的所有系统调用都扒一遍,详细解释每个系统调用的功能,用法,使用示例,应用场景和注意事项。系统中支持的系统调用列表及编号都定义在 /usr/include/asm/unistd.h文件下。以下的列表来源于64位的CentOS 7系统,详解链接后面会陆续补充。系统调用号 函数名 功能简介 起始内核版本 详解链接 0 read ...

2018-09-26 13:37:32

Linux内核学习总结

 Linux内核是一个提供硬件抽象层、文件系统管理、多任务管理等功能的系统软件,主要模块包括:CPU和进程管理、存储管理、文件系统、设备管理和驱动、网络通信、系统调用等。而本课程主要聚焦在CPU和进程管理模块,帮助我们理解程序在Linux系统中是如何运行、切换和调度的,以及进程调度与系统调用的关系。 一、课程内容总览    计算机程序的执行中,一个非常重要的概念就是函数调用堆栈,博文通...

2018-09-08 10:44:35

Linux内核分析(八)Linux中的进程调度与进程切换

本文将包括以下内容:1. Linux中进程调度的时机2. Linux的进程调度函数schedule()处理过程分析3. 进程上下文切换过程分析 一、Linux中进程调度的时机    进程调度函数schedule在Linux的源代码文件中有非常多的地方会调用,包括各种设备驱动程序(网络设备,文件系统,声卡等等)中,用cscope可以找到500+处调用。而我们今天将只关注内核部...

2018-09-08 10:38:38

Linux内核分析(七)系统调用execve处理过程

本文的内容包括:1. 用execve系统调用加载和执行一个可执行程序的代码演示2. 用gdb跟踪系统调用execve的执行过程3. execve系统调用处理过程分析 一、如何用execve系统调用加载一个可执行程序下面的代码可以展示如何用execlp函数启动一个新的进程,execlp是对系统调用execve的一层封装。 其中第19行的输出是故意加上的。执行结果如下,...

2018-09-08 10:35:15

Linux内核分析(六)Linux新进程创建处理过程

Linux创建新进程使用fork系统调用,系统调用的前期和一般的系统调用并没有什么特别的区别,而区别在于fork处理过程do_fork的内部。do_fork的处理过程可总结为:1. 复制父进程的程序控制块;2. 修改复制过来的进程控制块,将控制块中的属性值改为子进程自己的值,比如,栈指针指向自己的栈地址,并初始化栈顶指针,打开的文件列表初始化等等,而EIP的值将被设置为ret_from_f...

2018-09-08 10:31:39

Linux内核分析(五)Linux系统调用中断处理过程

上一篇博文我们用汇编的方式实现了对系统调用open的引用,这一次我们来深入到系统调用处理的内部,来看看Linux到底是如何处理系统调用的。     系统调用函数system_call的代码可以在arch/x86/kernel/entry_32.S中,完整的代码如下:(每行前面的数字是代码在源文件中的行号)  490 ENTRY(system_call) 491         R...

2018-09-08 10:29:59

Linux内核分析(四)Linux系统调用初探

系统调用是操作系统为用户态进程提供的一组可以与硬件设备进行交互的接口,可以帮助应用程序开发者从处理底层硬件的细节中解放出来。所以系统调用的上层就是我们的应用程序,而下层就是操作系统管理下的各种硬件设备和其他资源。应用程序是通过中断的方式向内核发出一个明确的请求的。本文的目的就是用一个直观的例子展示一下系统调用的过程。    先来看一个使用系统调用的小程序,这个程序用追加模式打开一个文件,在里面...

2018-09-08 10:28:26

Linux内核分析(三)Linux内核启动过程分析

作者:于波声明:原创作品,转载请注明出处参考:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000     这是网易云课堂《Linux内核分析》课程第三周的作业,要求分析Linux内核从start_kernel到init进程启动的过程。 一、实验环境搭建:    首先按照课程帮助在自己的机器上...

2018-09-08 10:24:24

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。