QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1394|回复: 5

请教如何使用系统调用sched_getparam?

[复制链接]
发表于 2004-6-1 00:39:47 | 显示全部楼层 |阅读模式
我使用RedHat Linux 9.0,用Emacs写了一个小程序,目的是使用一下几个系统调用,比如这里提到的sched_getparam()。源程序如下:
#include <sched.h>
#include <stdio.h>
#include <errno.h>

int main()
{
  errno=0;
  int retval;
  struct sched_param *p;
  if((retval=sched_getparam(0,p))==-1)
    {
      printf("systemcall sched_getparam fail\n");
      if(errno)
        perror("sched_getparam");
      exit(0);
    }
  
  printf("%ld\n",p->sched_priority);
}

运行结果如下:
    systemcall sched_getparam fail
      sched_getparam Bad address

我详细阅读了该系统调用的说明书页,没有找到错误所在。errno对应的信息是Bad address。请哪位大哥执教一二。感激不尽。

还有一个关于系统调用sched_setscheduler()的问题,源程序如下:
#include <sched.h>
#include <stdio.h>
#include <errno.h>

int main()
{
  errno=0;
  int retval;
  struct sched_param *p;
  p->sched_priority=10;
  if((retval=sched_setscheduler(0,SCHED_FIFO,p))==-1)
    {
      printf("systemcall sched_setscheduler fail\n");
      if(errno)
        perror("sched_setscheduler");
      exit(0);
    }

  printf("%ld\n",p->sched_priority);
}
运行结果如下:
    断错误

我实在想不出错在那里,盼望好心人指教。
发表于 2004-6-1 09:50:10 | 显示全部楼层
struct sched_param *p;
if((retval=sched_getparam(0,p))==-1)
改为
struct sched_param p;
if((retval=sched_getparam(0,&p))==-1)
试试,你的p没分配内存。
回复

使用道具 举报

发表于 2004-6-1 09:50:14 | 显示全部楼层
指针未初始化:
改为====>
struct sched_param p;
if((retval=sched_getparam(0,&p))==-1)
回复

使用道具 举报

发表于 2004-6-1 09:50:59 | 显示全部楼层
[quote:a6ce25f4fe="mozilla"]struct sched_param *p;
if((retval=sched_getparam(0,p))==-1)
改为
struct sched_param p;
if((retval=sched_getparam(0,&p))==-1)
试试,你的p没分配内存。[/quote]

晕,被你抢先了
回复

使用道具 举报

发表于 2004-6-1 09:53:07 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2004-6-3 00:38:41 | 显示全部楼层
感谢mozilla和z两位仁兄,这问题烦我快一星期了,多亏二位火眼金睛,识出破绽,不胜感激!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 04:47 , Processed in 0.042841 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表