- 论坛徽章:
- 0
|
小弟最近正在学习linux下的c语言编程,在网上搜到一个关于多进程的例子,如下:
父进程和子进程要分别独立地调用 rdwrt 函数,并执行一个循环,即从源文件中读一个字节,然后写一个字节到目标文件中区。当系统调用 read 遇见文件尾时,函数 rdwrt 立即返回。
#include <fcntl.h>
int fdrd, fdwt;
char c;
main(int argc, char *argv[])
{
if (argc != 3) {
exit(1);
}
if ((fdrd = open(argv[1], O_RDONLY)) == -1) {
exit(1);
}
if ((fdwt = creat(argv[2], 0666)) == -1) {
exit(1);
}
fork();
// 两个进程执行同样的代码
rdwrt();
exit(0);
}
rdwrt()
{
for (; {
if (read(fdrd, &c, 1) != 1) {
return ;
}
write(fdwt, &c, 1);
}
}
按道理讲子进程共享父进程的打开的文件描述符,两个进程共同完成对文件的复制。
但我自己在rdwrt函数中添加了打印信息的语句 ,修改后的程序如下:
#include <fcntl.h>
int fdrd, fdwt;
char c;
int cid;// 自己添加的部分
main(int argc, char *argv[])
{
if (argc != 3) {
exit(1);
}
if ((fdrd = open(argv[1], O_RDONLY)) == -1) {
exit(1);
}
if ((fdwt = creat(argv[2], 0666)) == -1) {
exit(1);
}
cid=fork();//自己修改的地方
// 两个进程执行同样的代码
rdwrt();
exit(0);
}
rdwrt()
{
for (; {
if(cid==0)
printf("1/" ;
else
printf("0/" ;
if (read(fdrd, &c, 1) != 1) {
return ;
}
write(fdwt, &c, 1);
}
程序运行结果显示所有的复制操作全是由子进程完成的 颇为疑惑,不应该是两者交叉的吗
[ 本帖最后由 cc007c 于 2007-4-10 13:56 编辑 ] |
|