linux内核函数笔记(一)
进程管理函数
pid_t getpid();返回当前进程的标识号PID
pid_t fork();创建一个进程。
pid_t vfork();与fork()相似,vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调用。
exec函数族:用于把一个新程序载入调用进程的内存空间,来改变进程的执行代码,从而形成新进程。execve才是真正意义上的系统调
用,其他的都是在此基础上的库函数。
int execl(const char *path,const char *arg,...);
int execv(const char *path,char *const argv[]);
int execle(const char *path,const char *arg,...,char *const envp[]);
int execve(const char *path,char *const argv[],char *const envp[]);
int execlp(const char *file,const char *arg,...);
int execvp(const char *file,char *const argv[]);
pid_t wait(int *status);为了实现进程间的同步,让进程进入休眠状态,知道被唤醒。
pid_t waitpid(pid_t pid,int *status,int options);与wait相似,但区别是它要等待指定的pid进程退出。
options:WNOHANG,要求如果没有子进程退出就立即返回。
WUNTRACED,对已经停止但本不用报告状态的子进程,该调用也从等待中返回并报告状态。
unsigned int sleep(unsigned int seconds);使进程挂起指定的时间。
clock_k times(struct tms *buf);获取当前进程的时间信息。
exit()和_exit()
void _exit(int status);直接使进程停止运行,清除其在使用的内存空间,并销毁其在内核中的各种数据结构
exit在此基础上加了其他一些工序:检查文件打开情况,把文件缓冲区中的内容写回文件。
文件操作函数
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,...,mode_t mode);
int create(const char *pathname,mode_t mode);
int close(int filedes);
size_t read(int filedes,void *buff,size_t nbytes);
ssize_t write(int filedes,void *buff,size_t nbytes);
off_t lseek(int filedes,off_t offset,int whence);
int dup(int oldfd);复制一个现存的文件描述符
int dup2(int oldfd,int newfd);同上
int ioctl(int d,int request,...);用来控制设备
文件属性
int access(const char *pathname,int mode);获得用户对文件的访问许可
int stat(const char *file_name,struct stat *buf);获取文件状态信息
int f
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
为内核寻找新进程在cpu上运行时,必须只考虑可运行进程(TASK_RUNNING)。
提高调度程序运行速度的诀窍是建立多个可运行进程链表,每种进程优先权对应一个不同的链表。每个task_struct描述符包含一个list_head类型的字段run_list。如果进程的优先权等于k(0-139),run_list字段把该进程链入优先权为k的可运行进程的链表中。 ......
每个进程都有一组相关的资源限制(resource limit),限制了指定进程能使用的系统资源数量。
对当前进程的资源限制存放在current->signal->rlim字段,进程的信号描述符的一个字段。该字段类型为rlimit结构的数组,每个资源限制对应一个元素。
struct rlimit {
unsigne ......
1.# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=yourname (在这修改hostname,把yourname换成你想用的名字)
NISDOMAIN=eng-cn.platform.com
2.修改/etc/hosts里面的名字
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost (在这修改hostname,把末尾的localhost换成你想用的名字)
&nbs ......
不可避免的,偶尔会忘记Linux根用户密码,我们需要通过Linux的single模式进入Linux重置:
grub引导内核时加single参数,例如:
grub> kernel (hd0,6)/vmlinuz single
grub> initrd (hd0,6)/initrd
grub> boot
非授权进入root,用pass ......