子线程读取文件-父线程进行其它工作
#include <stdio.h> // printf()
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> // open()
#include <string.h> // strcpy()
#include <unistd.h> // fork()
int main(int ac, char* av[])
{
int fd; // 文件描述符
char fn[1024]; // 文件名称
char buf[1024]; // 文件内容
// 参数个数
if(ac <= 1)
{
printf("please input the file name!\n");
return;
}
// 子线程读取文件
pid_t pid;
if( (pid = fork()) < 0 )
{
printf("create fork failed!\n");
return;
}
else if( pid == 0)
{
while(1)
{
printf("child!\n");
strcpy(fn, av[1]);
printf("file = %s\n", fn);
fd = open(fn, O_RDONLY);
printf("fd = %d\n", fd);
int size = read(fd, buf, sizeof(buf));
printf("size = %d\n", size);
printf("%s\n", buf);
close(fd);
sleep(3);
}
}
else
{
while(1)
{
printf("parent!\n");
sleep(2);
}
}
return 0;
}
输出结果:
[root@red2 threads]# ./test a.txt
child!
file = a.txt
fd = 3
size = 163
1111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222
33333333333333333333
444444444444444444
55555555555
66666666
7777
88
99
0
parent!
parent!
child!
file = a.txt
fd = 3
size = 163
1111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222
33333333333333333333
444444444444444444
55555555555
66666666
7777
88
99
0
parent!