Как понять чего конкретно не хватает
$ strace -f -e clone,write,chdir bash -c "cd | echo 'zz'"
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f1c61235a10) = 7494
strace: Process 7494 attached
[pid 7493] clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f1c61235a10) = 7495
strace: Process 7495 attached
[pid 7494] chdir("/home/jcmvbkbc") = 0
[pid 7495] write(1, "zz\n", 3zz
) = 3
[pid 7494] +++ exited with 0 +++
[pid 7495] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=7494, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
Если взять за основу эту схему, то становится понятно, как код процесса может узнать адреса текста, инициализированных данных, неинициализированных данных
и кучи
не ясно, как становится известен адрес стека и аргументов командной строки
Как мне избавится от дублирования кода, который одинаковый для нескольких целей, однако, отличается именами файлов(пусть имена файлов совпадают с названием целей)?
define generate-targets
$(1):
make -j5 TARGET=unwired BOARD=$$(BOARD)/$$(CPU) -f makefiles/Makefile.$$@
../bootloader/generate-metadata/generate-metadata $$@.bin 0x0 0x01A00001 1
srec_cat firmware-metadata.bin -binary $$@.bin -binary -offset 0x100 -o $$@-ota-image.bin -binary
rm $$@.hex
$(1)-fb: $(1)-CLEAN
../../tools/backdoor-bootloader.py -e -w -v $(1)-firmware.hex
$(1)-f: $(1)-CLEAN
/Applications/ti/Uniflash/flash_cc1310.sh $(1)-firmware.hex
$(1)-ota: $(1)
scp $(1)-ota-image.bin root@192.168.20.187:/root/unwired_smarthome
endef
$(eval $(call generate-targets,ubrige))
patch -p1 --dry-run < patch
CC build-x86_64/lock/rwlock.o
src/lock/rwlock.c:114:1: fatal error: opening dependency file build-x86_64/lock/rwlock.d: No such file or directory
}
...
Что такое rwlock на ubuntu, почему у меня его нет и как его поставить?
Что значит такой вывод? Из-за чего он возникает?
у них нет периодических прерываний от таймера. Зачем это делается?
имеет ли смысл использовать режим без тиков на компьютере (например, на встроенной системе), запускающем только один процесс?
#include <unistd.h>
int main()
{
int fd[2][2];
pipe(fd[0]);
pipe(fd[1]);
pid_t pid_fork = fork();
if (!pid_fork) {
// Дочерний процесс
close(fd[0][1]);
close(fd[1][0]);
dup2(fd[0][0], STDIN_FILENO);
dup2(fd[1][1], STDOUT_FILENO);
execl("/bin/tr", "/bin/tr", "l", "r", NULL);
} else {
// Родительский процесс
close(fd[0][0]);
close(fd[1][1]);
char buf[1000];
ssize_t sz;
write(fd[0][1], "hello, world\n", sizeof("hello, world\n") - 1);
close(fd[0][1]);
sz = read(fd[1][0], buf, sizeof(buf));
if (sz > 0) {
write(STDOUT_FILENO, buf, sz);
}
}
}