LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 841|回复: 2

着急!!!帮我看看这个程序?

[复制链接]
发表于 2008-5-20 18:40:07 | 显示全部楼层 |阅读模式
xv.c
   #include  <stdio.h>
#include  <stdlib.h>
#include  <sys/types.h>
#include  <sys/wait.h>
#include  <unistd.h>
int main()
{
  pid_t pc;
  pc = fork();

  if (pc==0)
{
  char *argv[] ={"sh","/home/xfm/ShiHe/thread"};
  execv("/bin/sh",argv);
  return 0;
}
}
thread.c
#include  <stdio.h>
#include  <pthread.h>
#include  <unistd.h>

#pragma pack(4)


pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*......*/
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;  //.......  


long Count = 0;

typedef unsigned char BOOL;

#define TRUE   1
#define FALSE  0


BOOL bFlag = TRUE;
void  *threadA(void *X)
{
     for(;;)
    {
      pthread_mutex_lock(&mutex);//
      Count ++;
      printf("1:%d\n",Count);
        
      pthread_cond_wait(&cond,&mutex);/*..*/

      pthread_cond_signal(&cond);/*............t_b..*/
      pthread_mutex_unlock(&mutex);//*.....*/
      sleep(1);
  }
}
//------------------------------------------------------
void  *threadB(void *X)
{
    for (;;)
   {
     pthread_mutex_lock(&mutex);
     Count ++;
     printf("2:%d\n",Count);
     
     pthread_cond_signal(&cond);/*............t_b..*/
     pthread_cond_wait(&cond,&mutex);/*..*/
     pthread_mutex_unlock(&mutex);
     sleep(1);
   }
}
//------------------------------------------------------
int   main(void)
{
   pthread_t ThreadA;
   pthread_t ThreadB;

   pthread_create(&ThreadA,NULL,threadA,NULL);
   pthread_create(&ThreadB,NULL,threadB,NULL);
  

   pthread_join(ThreadA,NULL);
   pthread_join(ThreadB,NULL);

   return 0;
}
xv.c 调用thread.c后出现 /home/xfm/ShiHe/thread: cannot execute binary file
这是为什么
帮忙,如何能正确调用
发表于 2008-5-20 19:22:21 | 显示全部楼层
拜托,就不能用[code][/c0de]把代码括起来吗?
看着,象一堆X一样
回复 支持 反对

使用道具 举报

发表于 2008-5-21 08:04:21 | 显示全部楼层
这个嘛,我的理解是:你有一个 thread.c 源程序,然后把它编译成了 /home/xfm/ShiHe/thread 这个可执行文件,然后在 xv 这个程序里面执行 /home/xfm/ShiHe/thread 这个程序是吧?

因为 thread 已经是一个可执行程序,所以不需要用 /bin/sh 去运行它了。你在命令行打 sh  /home/xfm/ShiHe/thread 也是这个错误。因此, xv 改成:
  1. ...
  2. char *argv[] ={"thread", NULL};
  3. execv("/home/xfm/ShiHe/thread",argv);
  4. ...
复制代码
大概应该就好了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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