共享缓冲进程

时间:2010-08-18 08:03:10

标签: c

我正在尝试调用向缓冲区添加一些字符的函数,然后将其删除。但我仍然没有正确调用该功能。我在Linux上工作。

ERROR: q_add makes an integer without a cast.

这是代码的一部分:

do {
    printf("Enter shared buffer operation ");
    printf("i(init)/a(add)/r(remove)/t(items)/d(delete)");
    scanf("%c%c", &op, &discard);
    int a=1;
    char n;

    switch ( op )
    {
      case 'i':
               printf("Enter nnumber a leter here!");
               scanf("%c" &n)
               q_add(a, &n);
               break;

      case 'a':
               q_delete();
               break;

      case 'r':
               q_remove(a, &n);
               break;
       //------------------------------------------------------------------

相应文件中q_add()的定义是:

 void q_add(int n, char *x)
 {
    shbuf->count += n;
    while ( n-- > 0 )
    {
        shbuf->buf[shbuf->inspos++] = *x++;
        if ( shbuf->inspos ==  QSIZ )
            shbuf->inspos = 0;
    }
 }

这个功能并没有真正起作用;如果我取消退出退出,我收到一个错误:

 void q_delete()
 {
    if ( -1 == shmctl(shmid, IPC_RMID, 0) )
    {
        perror("Can't remove shared mem");
        //exit(1);
    }
 }

2 个答案:

答案 0 :(得分:4)

您正在将该功能称为:

int a; 
char n;
....
q_add(a, n);

但def是:

void q_add(int n, char *x)

它希望char *作为第二个参数,并且您要发送char

答案 1 :(得分:3)

q_add(1, &n);