- 求职 : 通讯/电信开
- 论坛徽章:
- 2
|
key_t key= ftok("./sem.cpp",'a');总是提示文件不存在,但是不可能不存在啊。我的源代码文件名就是这个呢,还请各位大神看看,指点下,不甚感激- #include <iostream>
- #include <sys/sem.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <unistd.h>
- #include <errno.h>
- using namespace std;
- union semun
- {
- int val;
- struct semid_ds *buf;
- unsigned short *array;
- };
- int del_sem(int semid)
- {
- union semun arg;
- if (semctl(semid, 0, IPC_RMID, arg) < 0)
- {
- cout << "del sem error" << endl;
- return -1;
- }
- }
- int init_sem(int semid)
- {
- semun arg;
- arg.val = 0;
- if (semctl(semid, 0,SETVAL,arg)< 0)
- {
- cout << errno << endl;
- cout << "cannot init sem" << endl;
- return -1;
- }
- }
- int sem_p(int semid)
- {
- sembuf buf;
- buf.sem_num = 0;
- buf.sem_flg = SEM_UNDO;
- buf.sem_op = -1;
- if (semop(semid, &buf, 1) < 0)
- {
- cout << "sem_p error" << endl;
- return -1;
- }
- }
- int sem_v(int semid)
- {
- sembuf buf;
- buf.sem_num = 0;
- buf.sem_flg = SEM_UNDO;
- buf.sem_op = 1;
- if (semop(semid, &buf, 1) < 0)
- {
- cout << "sem_v error" << endl;
- return -1;
- }
- }
- int main()
- {
- key_t key= ftok("./sem.cpp",'a'); //gdb错误提示:No such file or directory.
- int semid = semget(key,1,IPC_CREAT|0x0777);
- if (semid < 0)
- {
- cout << errno << endl;
- cout << "cannot semget" << endl;
- del_sem(semid);
- return -1;
- }
- init_sem(semid);
- pid_t pid = fork();
- if (pid < 0)
- {
- cout << "cannot fork" << endl;
- return -1;
- }
- else
- {
- if (pid == 0)
- {
- //child pid
- //critical
- cout << "child progress will wait for 3 seconds" << endl;
- sleep(3);
- cout << "child progress exit pid is 0" << endl;
- sem_v(semid);
- }
- else
- {
- //father pid
- sem_p(semid);
- cout << "father progress exit pid is" <<getpid()<< endl;
- sem_v(semid);
- del_sem(semid);
- }
- }
- return 0;
- }
复制代码 总是提醒文件不存在,怎么回事啊?
|
|