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
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项,别的没有必要吧?