小编Pit*_*kos的帖子

什么是C中的目标文件?

我正在阅读C中的库,但我还没有找到对象文件的解释.任何其他编译文件和目标文件之间的真正区别是什么?
如果有人能用人类语言解释,我会很高兴.

c linker compilation object-files

127
推荐指数
4
解决办法
11万
查看次数

如何让Makefile重新编译已更改的文件?

我一直在努力让make只编译已经编辑过的文件.但是我没有太大成功,所有文件都被重新编译.有人能解释一下为什么吗?

我的文件是:

main.c
a_functions.c
Run Code Online (Sandbox Code Playgroud)

其中main.c包含main.ha_functions.c包含

这是我的makefile:

CC=gcc
CFLAGS=-Wall -I. -c
EXEC_FILE=program1


all: program

a_functions.o: a_functions.c
a_functions.c: a.h
main.o: main.c
main.c: main.h

objects: a_functions.c main.c
    $(CC) a_functions.c main.c $(CFLAGS)

program: a_functions.o main.o
    $(CC) a_functions.o main.o -o $(EXEC_FILE)
Run Code Online (Sandbox Code Playgroud)

根据建议更改makefile似乎有同样的问题::

all: program

a_functions.o: a_functions.c a.h
    gcc a_functions.c -c

main.o: main.c main.h
    gcc main.c -c

program: a_functions.o main.o
    gcc a_functions.o main.o -o program1
Run Code Online (Sandbox Code Playgroud)

c makefile recompile

58
推荐指数
2
解决办法
6万
查看次数

C:如何使用POSIX线程声明递归互斥锁?

我对如何使用pthread声明递归互斥锁感到困惑.我尝试做的是一次只有一个线程能够运行一段代码(包括函数)但是在怀疑之后我发现使用互斥量不起作用而我应该使用递归互斥锁.这是我的代码:

pthread_mutex_lock(&mutex);                   // LOCK

item = queue_peek(queue);                     // get last item in queue
item_buff=item;                               // save item to a buffer
queue_removelast(queue);                      // remove last item from queue

pthread_mutex_unlock(&mutex);                 // UNLOCK
Run Code Online (Sandbox Code Playgroud)

所以我尝试做的只是串行读取/删除队列.

问题在于,没有任何关于如何声明递归互斥体的例子.或者可能有一些,但他们不为我编译.

c multithreading mutex pthreads recursive-mutex

45
推荐指数
3
解决办法
5万
查看次数

如何使中间div填充浮动元素之间的空间?

我有三个div元素:左,中,右.左右是固定和浮动的.我想要的是中间div填补它们之间的空白.

这是我的代码:

<!DOCTYPE html>
<html>
<head>
   <style>
      * {border: dotted 1px red;}
      #left {
         width: 200px;
         float: left;
      }
      #middle {
         float: left;
      }
      #right {
         width: 200px;
         float: right;
      }
   </style>
</head>
<body>
   <div id="left"  >  left   </div>
   <div id="middle">  middle </div>
   <div id="right" >  right  </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?我尝试了不同的解决方案,但没有设法做我想要的.

html css3 css-float

26
推荐指数
1
解决办法
2万
查看次数

如何从循环外部杀死无限循环中的pthread?

我创建了一个线程,并将其置于无限循环中.使用valgrind检查代码时出现内存泄漏.这是我的代码:

#include <pthread.h>
#include <time.h>

void thread_do(void){
    while(1){}
}

int main(){
    pthread_t th;   
    pthread_create(&th, NULL, (void *)thread_do, NULL);

    sleep(2);
    /* I want to kill thread here */
    sleep(2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以在main中创建一个线程,并且一直运行thread_do().有没有办法在2秒后从内部杀死它?我试过了两次pthread_detach(th),pthread_cancel(th)但我仍然有泄漏.

c memory-leaks pthreads threadpool

24
推荐指数
2
解决办法
3万
查看次数

C:用pthreads制作poolthread的方法是什么?

我有一个工作队列,我想建立一个4个线程的池,我可以把我的工作.我所坚持的是如何制作线程并在没有工作的情况下让它们暂停.

JOB QUEUE        | job1 | job2 | job3 | job4 | ..

THREAD POOL      | thread1 | thread2 | thread3 | thread4 |
Run Code Online (Sandbox Code Playgroud)

要创建我目前处于初始化点的线程:

for (t=0; t<num_of_threads; t++){
    pthread_create(&(threads[t]), NULL, doSth2, NULL);
}
Run Code Online (Sandbox Code Playgroud)

num_of_threads = 4且doSth2是一个内部没有任何内容的函数.所以一旦我创建了4个线程并且完成了doSth2,我怎么能给他们新的工作呢,而不会杀死他们?

c pthreads reusability threadpool

20
推荐指数
2
解决办法
1万
查看次数

有人可以解释C中的dup()吗?

我知道dup,dup2,dup3" 创建文件描述符oldfd的副本 "(来自手册页).但是我无法消化它.

据我所知文件描述符只是数字来跟踪文件的位置和它们的方向(输入/输出).是不是更容易

fd=fd2;
Run Code Online (Sandbox Code Playgroud)

每当我们想复制文件描述符?

还有别的......

dup()使用编号最小的未使用描述符作为新描述符.

这是否意味着它还可以作为值stdin,stdoutstderr,如果我们假设我们有close() -其中一个?

c pipe dup2 dup

20
推荐指数
4
解决办法
3万
查看次数

在Ansible中获取父目录?

有没有办法在Ansible中评估相对路径?

tasks:
  - name: Run docker containers
    include: tasks/dockerup.yml src_code='..'
Run Code Online (Sandbox Code Playgroud)

基本上我有兴趣将源代码路径传递给我的任务.碰巧源代码是父路径,{{ansible_inventory}}但似乎没有任何东西可以实现开箱即用.

----进一步信息----

项目结构:

myproj
  app
  deploy
    deploy.yml
Run Code Online (Sandbox Code Playgroud)

所以我试图访问app距离deploy.yml.

yaml path ansible

15
推荐指数
1
解决办法
1万
查看次数

Python:为类的任何方法做些什么?

假设我有一个包含大量方法的类:

class Human():

  def eat():
    print("eating")

  def sleep():
    print("sleeping")

  def throne():
    print("on the throne")
Run Code Online (Sandbox Code Playgroud)

然后我运行所有的方法

John=Human()
John.eat()
John.sleep()
John.throne()
Run Code Online (Sandbox Code Playgroud)

我想print("I am")为每个被调用的方法运行.所以我应该得到类似的东西

I am:
eating
I am:
sleeping
I am:
on the throne
Run Code Online (Sandbox Code Playgroud)

有没有办法在不重新格式化每种方法的情况下执行此操作?

python methods function

13
推荐指数
1
解决办法
5099
查看次数

杀死分叉的孩子会杀死父母?

我进入这种奇怪的行为,我有我的主程序和分叉的孩子.它们是这样的管道(数字是文件描述符):

 ___parent___
|            |                     ____child_____
| 0 stdin    |                    |              |
| 1 pipe1[1]----------.           |  1 stdout    |
| 2 pipe2[1]----------.\          |  2 stderr    |
|____________|         \`----------> 3 pipe1[0]  | 
                        `----------> 5 pipe2[0]  |
                                  |______________|
Run Code Online (Sandbox Code Playgroud)

所以父从stdin获取输入,但是将stdoutstderr重定向到两个管道.孩子关闭了它的标准输入并使用了管道的读取端.

然后我有一个杀死孩子的功能:

void killChild(){
  printf("Killing %d\n", (int)childID);
  fflush(stdout);
  kill(childID, SIGKILL);
  waitpid(childID, NULL, 0);   // getting rid of the zombie
}
Run Code Online (Sandbox Code Playgroud)

孩子被成功杀死但问题是父母本身也被杀死了.我检查了孩子的PID,这是正确的.

那么为什么父母会死?

c linux ipc process

12
推荐指数
1
解决办法
797
查看次数