Samba源码分析与移植

1.pipe(建立管道)相关函数  mkfifo,popen,read,write,fork
表头文件  #include&

定义函数  int pipe(int filedes[2]);
函数说明  pipe()会建立管道,并将文件描述词由参数filedes数组返回。filedes[0]为管道里的读取端,filedes[1]则为管道的写入端。

返回值  若成功则返回零,否则返回-1,错误原因存于errno中。& D' A( G: `( t$ y9 j
错误代码  EMFILE 进程已用完文件描述词最大量。
AENFILE 系统已无文件描述词可用。
EFAULT 参数filedes数组地址不合法。

范例  /* 父进程借管道将字符串“hello!/n”传给子进程并显示*/

#include   E

main();

{
int filedes[2];
char buffer[80];1

pipe(filedes);! R* @+ G/ M" G1 t
if(fork()>0){
/* 父进程*// G9 h* F- E: d3 d7 C
char s[ ] = “hello!/n”;
write(filedes[1],s,sizeof(s));
}
else{8 Z1 Q) W" _* j: h9 n
/*子进程*/6 s2 Y0 f* @% m
read(filedes[0],buffer,80);, b( a; o% f9 O  H/ y9 i0 o# w
printf(“%s”,buffer);$ N- I/ v7 w  ~, ^* ^
}

}

 

2.

一、编译
1、从www.samba.org上下载最新samba的软码包,解压;

2、设置环境变量:
export LD_LIBARY_PATH=/usr/local/arm/3.0/lib/
export CPPFLAGS=-I/usr/local/arm/3.0/include
export LDFLAGS=-L/usr/local/arm/3.0/lib/
export CC=/usr/local/arm/3.0/bin/arm-linux-gcc
export CFLAGS="-march=armv4 -mtune=arm9tdmi -mshort-load-bytes"

3、运行configure
./configure --host=i686 --target=arm-linux

4、在include/config.h文件里增加:
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define SIZEOF_SHORT 2
#define HAVE_GETTIMEOFDAY_TZ 1
#define USE_SETEUID 1
#define HAVE_IFACE_IFCONF 1

5、make

二、应用
1、在将要烧到flash的文件系统下创建以下目录:
/usr/local/samba
/usr/local/samba/bin
/usr/local/samba/var
/usr/local/samba/private
/usr/local/samba/lib

注:因为我们编译的时候使用的是缺省配置,程序在运行时会在上述目录里生成文件。
同时编译文件系统应该和编译samba时候应该选用同样的c库。

2、将编译后的samba源码目录下的bin/子目录里的内容拷贝到/usr/local/samba/bin
从网上下载一个简单的smb.conf,经过修改后放到/usr/local/samba/lib。
smb.conf是samba守护进程nmbd、smbd运行的配置文件,在这个文件里指定了
验证、共享用户、共享打印。

3、用smbpasswd -a username 添加一个samba用户,并生成samba密码文件smbpasswd,这个文件
的具体位置同样在smb.conf里指定。

4、运行samba守护进程
运行:nmbd -D, smbd -D,smbd提供 SMB/CIFS server,nmbd提供NetBIOS name server。
我们也可以通过在rc.local里添加,从而系统在启动后就会自动加载samba服务。

5、启动samba的服务后,我们就可以在windows的浏览器窗口里用ip地址和刚刚生成的
samba用户身份来浏览服务器的共享目录。

 

我用得也是交叉编译,不过,export LD_LIBARY_PATH=/usr/local/arm/3.0/lib/
export CPPFLAGS=-I/usr/local/arm/3.0/include
export LDFLAGS=-L/usr/local/arm/3.0/lib/
export CC=/usr/local/arm/3.0/bin/arm-linux-gcc
export CFLAGS="-march=armv4 -mtune=arm9tdmi -mshort-load-bytes"
除了CC项,别的没有必要吧?

你可能感兴趣的:(Samba源码分析与移植)