semop 错误File too large

xunyingren 2008-10-11 11:48:59
void up(int sem_id, int sem_num)
{
struct sembuf xx;
xx.sem_num = sem_num;
xx.sem_op = 1;
xx.sem_flg = 0;
if(semop(sem_id, &xx, 1)== -1)
{
fprintf(stderr,"Fail in upsemop:%s\n",strerror(errno));
//exit(1);
}
}
是不是删除了信号量之后会出现错误Invalid argument
那什么时候会出现错误File too large
还有改为sem_flg=SEM_UNDO有什么区别,up操作时信号量是不是立即加1
...全文
743 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cceczjxy 2008-10-13
  • 打赏
  • 举报
回复
File too large
应该不是 if(semop(sem_id, &xx, 1)== -1)
的错误,如果想知道某个操作的失败原因,最好在其之前,使errno=0;
xunyingren 2008-10-11
  • 打赏
  • 举报
回复
补充:


我查到

27
EFBIG
File too large
The value for sem_num is < 0 or >= to the number of semaphores in the set.
可我不知道那里出错?
#define SEM_EMPTY 0
#define SEM_FULL 4
#define SEM_MUTEX 1
#define SEM_NUMBER 2
#define SEM_LETTER 3


//down操作
void down(int sem_id, int sem_num)
{
/*
struct sembuf {
ushort sem_num ; //member # in set (0, 1,, nsems-1
short sem_op ; //operation(negative, 0,or pasitive)
short sem_flg ; // IPC_NOWAIT, SEM_UNDO
} ;
*/
struct sembuf xx;
xx.sem_num = sem_num;
xx.sem_op = -1;
xx.sem_flg = 0;
/*int semop(int semid, struct sembuf semoparray[], size_t nops) ;
semoparray是一个指针,它指向一个信号量操作数组。
nops规定该数组中操作的数量(元素数)。
*/
if(semop(sem_id, &xx, 1)== -1)
{
fprintf(stderr,"Fail in downsemop:%s\n",strerror(errno));
//exit(1);
}
}

//up操作
void up(int sem_id, int sem_num)
{
struct sembuf xx;
xx.sem_num = sem_num;
xx.sem_op = 1;
xx.sem_flg = 0;
if(semop(sem_id, &xx, 1)== -1)
{
fprintf(stderr,"Fail in upsemop:%s\n",strerror(errno));
//exit(1);
}
}
down(sem_id,SEM_EMPTY);
down(sem_id,SEM_MUTEX);

up(sem_id,SEM_MUTEX);
up(sem_id,SEM_NUMBER);

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧