rss 
Linux编程学习
Socket程序从Windows移植到Linux下的一些注意事项
10)用IP定义一个地址(sockaddr_in的结构的区别)
Windows下addr_var.sin_addr.S_un.S_addr
Linux下addr_var.sin_addr.s_addr
而且Winsock里最后那个32bit的S_addr也有几个以联合(Union)的形式与它共享内存空间的成员变量(便于以其他方式赋值),而Linux的Socket没有这个联合,就是一个32bit的s_addr。遇到那种得到了是4个char的IP的形式(比如127一个,0一个,0一个和1一个共四个char),WinSock可以直接用4个S_b来赋值到S_addr里,而在Linux下,可以用边向左移位(一下8bit,共四下)边相加的方法赋值。
(10月08日) [查看全文]
Linux系统上的C/C++编译器

Linux 中最重要的软件开发工具是 GCC。GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC能够编译三种语言:C、C++和ObjectC(C语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。

如果你有两个或少数几个C源文件,也可以方便地利用GCC编译、连接并生成可执行文件。例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。

(10月07日) [查看全文]
Linux下常用系统函数集锦

一、进程控制:

fork 创建一个新进程
clone 按指定条件创建子进程
execve 运行可执行文件
exit 中止进程
_exit 立即中止当前进程
getdtablesize 进程所能打开的最大文件数
getpgid 获取指定进程组标识号

(10月07日) [查看全文]
Linux kernel常用编码模式

emory Caches
当需要经常分配和释放内存时,内核通常使用cache进行管理。而不是使用开销非常大的kmalloc和kfee。

kmem_cache_alloc
kmem_cache_free

更多详细的内容应该查看slab分配器。

向量定位

(10月07日) [查看全文]
Linux0.11进程创建函数fork()

Linux0.11进程创建函数fork()
 
作者: ouseove  发布日期: 2008-10-07    查看数: 18   出自: http://www.linuxdiyf.com
 在Linux中,有一个特殊的函数fork()。这个函数会向父进程返回子进程的进程号PID,而向子进程返回0。有没有想过一个函数怎么可能有两个不同的返回值呢?

QUOTE:
#include
#include /* contains fork prototype */
int main(int argc, char **argv) {
if (fork() == 0) {
printf("I am the child process.\n");
} else {
printf("I am the parent process.\n");
}
}


在Linux0.11中,每个进程都有一个进程控制块结构task_struct。系统支持最多64个进程,定义在全局数组task中。

QUOTE:
struct task_struct * task[NR_TASKS] = {&(init_task.task), };


其中进程0为初始进程,其它所有的进程都是通过fork产生的。用户态的fork函数最终调用系统调用sys_fork()。sys_fork()系统调用分成2步完成,第一步调用函数find_empty_process(),在task[]数组中找一项空闲项;第二步调用copy_process()函数,复制进程。

对所有fork()调用产生的进程,通过递增并循环的方式为其分配进程号。有一个全局变量last_pid用来记录上次使用的进程号:

long last_pid=0;

在find_empty_process中,不断递增last_pid,寻找第一个未被其它进程使用的进程号作为新进程的进程号。如果递增后的值超出正数表示范围,则重新从1开始。

进程控制块中还保存有进程的任务状态段数据结构tss,用于存储处理器管理进程的所有信息。也就是说,在任务切换过程中,首先将处理器中各寄存器的当前值被自动保存当前进程的tss中;然后,下一进程的tss被加载并从中提取出各个值送到处理器的寄存器中。由此可见,通过在tss中保存任务现场各寄存器状态的完整映象,实现任务的切换。

struct tss_struct tss;

因此,一旦在task[]数组中找到空闲项和进程号,我们就可以为该进程的进程控制块结构申请一个页面的内存。这个工作是在copy_process()函数中完成的。当然copy_process()函数的最主要的任务是为子进程复制父进程信息,并设置子进程的任务状态段,其中最关键的两步是:

1. 把子进程tss中的eip设置为父进程系统调用返回地址,这样当子进程被调度程序选中后,将从父进程的fork()返回地址处开始执行。

p->tss.eip = eip;

2. 把子进程tss中的eax设置为0,而eax是存放函数返回值的地方,这样子进程中返回的是0。注意子进程并没有执行fork()函数,子进程的系统堆栈没有进行过操作,当然不会有像父进程那样的fork函数调用。但是当子进程开始运行时,就好像它从fork中返回。

p->tss.eax = 0;
 

(10月07日) [查看全文]
bochs模拟运行Linux0.11问题及解答

问题:

[MEMO]ROM:System BIOS image undefined

解决:给bochs正确配置一个*.bxrc

问题:Event type: PANIC

Device: [MEM0 ]

(10月07日) [查看全文]
在Linux系统下把文件转换为UTF-8编码

转换环境Linux系统,整个项目要转换为多语言版本,所有文件储存格式由原来GB2312转换为UTF-8编码,为了方便,借助iconv命令写了下面脚本:

#!/bin/bash

if [ -z "$1" ];
then
echo "Please input a directory name";
exit 1;
fi

if [ -z "$2" ];
then
echo "Please input a the file conversion";
exit 1;
fi

(10月06日) [查看全文]
Linux编程快速入门

整理了Linux编程快速入门的一些资料,分享给大家。

1. 了解编译器
编译xxx.c,产生可执行文件xxx
gcc xxx.c -o xxx

如果是C++写的
g++ -g xxx.c -o xxx

其中
#-g产生调试信息,用strip xxx #去除调试信息

其他选项:

(10月05日) [查看全文]
Linux学习笔记之Shell 的重要性

基础

Linux Shell 的角色就如翻译者一般。

Sehll 就像是一个壳,它介于用户和操作系统(Kernel)中间,负责将用户的命令解释为操作系统可以接受的低级语言,同时将操作系统响应的信息以用户了解的方式来显示。

在登录到退出系统期间,用户输入的每个命令都会经过解释及执行,而这个负责的机制就是 Shell。

(10月05日) [查看全文]
Linux平台下eXosip2编译笔记

下面是一则在Linux平台下编译eXosip2的笔记,可能对大家有用。

程序包准备

libosip2-3.0.1.tar.gz
libeXosip2-3.0.1.tar.gz

将两个程序包放在同一个目录下

先编译osip2

(10月04日) [查看全文]
Linux下编译osip2和eXosip2

今天闲来无事,准备在Linux下看看sip的东西。

从网上下了osip2和eXosip2的源码,才没有多久,怎么都到3.1.0版本了。

如果是需要系统安装,则按照标准程序(解压,Makefile,make和make install),先osip,后eXosip即可。但我不想安装到系统,只想做一些应用开发,所以需要仔细看一下。

(10月04日) [查看全文]
深入了解C#程序语言
在微软领导 C# 开发的Anders Hejlsberg,曾负责编写Turbo Pascal系统,并且是Delphi语言开发团队的首席架构师。
(10月03日) [查看全文]
9/95<<1...567891011...95>>GO
内容分类
Linux新闻 (2737)
Linux技术交流 (6685)
数据库技术 (1219)
Linux编程学习 (1132)
服务器应用 (1318)
Linux网络安全 (1103)
Linux下载 (230)
Linux认证 (43)
数码 (932)
手机 (1164)
笔记本 (332)
硬件 (204)
随身听 (239)
电脑 (45)
赞助商连接