<> #include #include unsigned char buf[256] = "asdfghjkl"; unsigned int vcnt = 34567, vflg = 0; int main(int argc, char **argv) { int i; char s1[20], s2[20], s3[20], *argv2[10]; argv2[0] = "task2.elf"; sprintf(s1, "%d", &buf); argv2[1] = s1; sprintf(s2, "%d", &vflg); argv2[2] = s2; sprintf(s3, "%d", &vcnt); argv2[3] = s3; argv2[4] = "&"; // Background Job printf("\rvflg(0) = %d\r",vflg); // 現在の値 exec(5,argv2); // 子プロセス(task2.elf)の起動 sleep(3000); // task2が終了する(であろう時間)まで待つ printf("vflg(1) = %x\r",vflg); // task2で変更された後の値 } <> #include #include void *memset2(void *str, int c, size_t num) // 1バイトしか転送しない(この関数は冗長なので、適宜書き換えて下さい。) { unsigned char *ptr = (unsigned char *)str + 3; // intは4バイトと決め打ちし、4バイトの右端にセットする *ptr = c; } int main(int argc, char **argv) { unsigned int i, b1, v1, *v2, vcnt; unsigned char buf[256], *v3; b1 = atoi(argv[1]); // address of buf1 v1 = atoi(argv[2]); // address of vflg v2 = (unsigned int *)(atoi(argv[3])); // address of vcnt memcpy(buf, (unsigned int *)b1, 256); // taskのbufをtask2のbufにコピー memset2((unsigned int *)v1, 255, 1); // taskのvflgに値(255)をセット vcnt = *v2; // taskのvcntの値を取得 for(i=0;i<argc;i++) { printf("task2.argv(%d) = %s\r",i,argv[i]); } printf("task2.buf = %s\r",buf); printf("task2.vcnt = %d\r",vcnt); v3 = (unsigned char *)(b1+6); // taskのbufを直接参照 printf("task.buf[6] = %c\r",*v3); }