您的位置:程序门 -> linux/unix社区 ->



cygwin中的bad system call


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


cygwin中的bad system call[无满意答案结贴,结贴人:hotgsk]
发表于:2007-12-02 12:57:30 楼主
执行gcc指令生成可执行文件后,执行.exe文件出现了“bad       system       call”,麻烦哪位朋友告诉声怎么回事啊?莫非又有什么包没有装上?
发表于:2007-12-03 09:28:531楼 得分:0
cygwin运行的应该是elf和脚本的文件,.EXEC是否不能运行的
发表于:2007-12-03 17:59:122楼 得分:0
但是,我的其他.c文件生成.exe文件后却可以正确运行。我是新手,麻烦解答。
发表于:2007-12-04 17:23:273楼 得分:0
附个源代码,大家看看。
#include   <sys/types.h>
#include   <sys/ipc.h>
#include   <sys/sem.h>
#include   <stdio.h>
#include   <sys/shm.h>


#define   key   (key_t)   105
#define   key2   (key_t)   108
#define   max_buffer_size   10
union   semun{
          int   val;
          struct   semid_ds   *buf;
          ushort   *array;
};

typedef   struct   _tagsharebuffer{
          int   buffer[max_buffer_size];
          int   writer;
          int   reader;
}sharebuffer;


int   main()
{
          int   shmid;
          char*   shmptr;

          sharebuffer*   psharebuffer;
          int   product=0;

          int   semid;
          struct   sembuf   mutex,empty,full;

          int   i;


          if((semid=semget(key,3,ipc_creat ¦0660))==-1)
          {
                printf("semget   error!\n");
                return   -1;
          }


          union   semun   arg[3];
          arg[0].val=1;
          arg[1].val=max_buffer_size;
          arg[2].val=0;
   
          for(i=0;i <3;i++)
                semctl(semid,i,setval,arg[i]);

          for(i=0;i <3;i++)
                printf("the   semval(%d)=%d\n",i,semctl(semid,i,getval,null));


          if((shmid=shmget(ipc_private,sizeof(sharebuffer),0600)) <0)
          {
                printf("shmget   error!\n");
                return   -1;
          }

          if((shmptr=(char*)shmat(shmid,0,0))==(void*)-1)
          {
                printf("shmat   error!\n");
                return   -1;
          }

          memset((void*)shmptr,0,sizeof(sharebuffer));

          psharebuffer=(sharebuffer*)shmptr;

          int   childpid=fork();
         
          if(childpid==-1)
          {
                printf("create   process   error!");
                return   -1;
          }

          if(childpid==0)
          {

          while(1)
          {
                empty.sem_num=1;
                empty.sem_op=-1;
                empty.sem_flg=0;
                semop(semid,&empty,1);
     
                psharebuffer-> buffer[psharebuffer-> writer]=product;

                for(i=0;i <3;i++)
                      printf("the   semval(%d)=%d\n",i,semctl(semid,i,getval,null));

                printf("produced   the   product   into   buffer[%d]=%d;\n",psharebuffer-> writer,product);
 
                product++;

                mutex.sem_num=0;
                mutex.sem_op=-1;
                mutex.sem_flg=0;
                semop(semid,&mutex,1);
       
                psharebuffer-> writer=(psharebuffer-> writer+1)%max_buffer_size;
     
                mutex.sem_num=0;
                mutex.sem_op=1;
                mutex.sem_flg=0;
                semop(semid,&mutex,1);

                full.sem_num=2;
                full.sem_op=1;
                full.sem_flg=0;
                semop(semid,&full,1);

                sleep(1);
          }
          }
          else
          {
       
            while(1)
          {    
                sleep(5);    
           
                full.sem_num=2;
                full.sem_op=-1;
                full.sem_flg=0;
                semop(semid,&full,1);
     
                product=psharebuffer-> buffer[psharebuffer-> reader];
   
                for(i=0;i <3;i++)
                      printf("the   semval(%d)=%d\n",i,semctl(semid,i,getval,null));
   
                printf("consumed   the   product   from   buffer[%d]=%d;\n",psharebuffer-> reader,product);

                product--;
     
                mutex.sem_num=0;
                mutex.sem_op=-1;
                mutex.sem_flg=0;
                semop(semid,&mutex,1);

                psharebuffer-> reader=(psharebuffer-> reader+1)%max_buffer_size;

                mutex.sem_num=0;
                mutex.sem_op=1;
                mutex.sem_flg=0;
                semop(semid,&mutex,1);

                empty.sem_num=1;
                empty.sem_op=1;
                empty.sem_flg=0;
                semop(semid,&empty,1);

          }
          }

          return   0;  


}
发表于:2007-12-07 15:03:234楼 得分:0
哎,难道真没有人知道么?


快速检索

最新资讯
热门点击