- 论坛徽章:
- 0
|
原帖由 zenglei286 于 2007-10-15 12:13 发表 ![]()
能写一个例子吗,不用太复杂,只要能说明问题的部分写出来就可以
- #include<stdio.h>
- #include<fcntl.h>
- #include<semaphore.h>
- #include<stdlib.h>
- #include<unistd.h>
- #include<sys/types.h>
- #include<sys/mman.h>
- int main(int argc, char **argv)
- {
- int fd, i, nloop, zero = 0;
- int *ptr;
- sem_t *mutex;
- if (argc != 3)
- {
- fprintf(stderr, "usage: test <pathname> <#loops>\n");
- exit(1);
- }
- nloop = atoi(argv[2]);
- if ((fd = open(argv[1], O_RDWR|O_CREAT, 0644)) < 0)
- {
- fprintf(stderr, "open %s error\n", argv[1]);
- exit(1);
- }
- if (write(fd, &zero, sizeof(int)) < 0)
- {
- fprintf(stderr, "write error\n");
- exit(1);
- }
- ptr = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (ptr == NULL)
- {
- fprintf(stderr, "mman error\n");
- exit(1);
- }
- close(fd);
- mutex = sem_open("/hello", O_CREAT|O_EXCL, 0644, 1);
- if (mutex == SEM_FAILED)
- {
- fprintf(stderr, "sem_open fail\n");
- exit(1);
- }
- sem_unlink("/hello");
- setbuf(stdout, NULL);
- if (fork() == 0)
- {
- for (i = 0; i < nloop; i++)
- {
- sem_wait(mutex);
- printf("child: %d\n", (*ptr)++);
- sem_post(mutex);
- }
- exit(0);
- }
- for (i = 0; i < nloop; i++)
- {
- sem_wait(mutex);
- printf("parent: %d\n", (*ptr)++);
- sem_post(mutex);
- }
- return 0;
- }
复制代码
这是<UNIX网络编程>卷2上的一个父子进程同步的例子. 使用信号量的方法, 比较简单. 你看看吧
用文件锁当然可以了. 你父进程先去把文件锁了, 然后子进程每次运行时去读那个文件, 看是否锁住, 如果锁住则不运行, 如果没锁则将其锁定, 就这样啊. |
|