我正在阅读C中的库,但我还没有找到对象文件的解释.任何其他编译文件和目标文件之间的真正区别是什么?
如果有人能用人类语言解释,我会很高兴.
我一直在努力让make只编译已经编辑过的文件.但是我没有太大成功,所有文件都被重新编译.有人能解释一下为什么吗?
我的文件是:
main.c
a_functions.c
Run Code Online (Sandbox Code Playgroud)
其中main.c包含main.h 和a_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) 我对如何使用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)
所以我尝试做的只是串行读取/删除队列.
问题在于,没有任何关于如何声明递归互斥体的例子.或者可能有一些,但他们不为我编译.
我有三个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)
关于如何做到这一点的任何想法?我尝试了不同的解决方案,但没有设法做我想要的.
我创建了一个线程,并将其置于无限循环中.使用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)但我仍然有泄漏.
我有一个工作队列,我想建立一个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,我怎么能给他们新的工作呢,而不会杀死他们?
我知道dup,dup2,dup3" 创建文件描述符oldfd的副本 "(来自手册页).但是我无法消化它.
据我所知文件描述符只是数字来跟踪文件的位置和它们的方向(输入/输出).是不是更容易
fd=fd2;
Run Code Online (Sandbox Code Playgroud)
每当我们想复制文件描述符?
还有别的......
dup()使用编号最小的未使用描述符作为新描述符.
这是否意味着它还可以作为值stdin,stdout或stderr,如果我们假设我们有close() -其中一个?
有没有办法在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.
假设我有一个包含大量方法的类:
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)
有没有办法在不重新格式化每种方法的情况下执行此操作?
我进入这种奇怪的行为,我有我的主程序和分叉的孩子.它们是这样的管道(数字是文件描述符):
___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获取输入,但是将stdout和stderr重定向到两个管道.孩子关闭了它的标准输入并使用了管道的读取端.
然后我有一个杀死孩子的功能:
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,这是正确的.
那么为什么父母会死?