2010-09-01 4 views
3

Est-ce que le SDK iPhone permet fork() et pipe(), les fonctions unix traditionnelles? Je n'arrive pas à les faire fonctionner.Fork() sur iPhone

Modifier

Problème résolu. Ici, j'offre une solution à tous ceux qui rencontrent des problèmes similaires à moi. J'ai été inspiré par les réponses dans ce fil.

Dans l'iPhone, il n'y a aucun moyen de forger un processus. Cependant, il n'est pas impossible d'implémenter la tuyauterie. Dans mon projet, je crée un nouveau thread POSIX (lisez la documentation d'Apple pour savoir comment faire). Le thread enfant partagerait un descripteur de fichier créé par pipe() avec le thread parent. Les threads enfant et parent peuvent communiquer via des canaux. Par exemple, mon fils thread dup2() fd [1] à sa sortie standard. Ainsi, toute sortie standard pourrait être interceptée dans le thread parent. Similaire à fd [0] et à l'entrée standard.

pseudocode (je n'ai pas le code disponible, mais vous voyez l'idée):

int fd[2]; 
pipe(fd); 
create_posix_thread(&myThread, fd); 
char buffer[1024]; 
read(fd[0], buffer, 1024); 
printf("%s", buffer); // == "Hello World"  

void myThread(int fd[]) 
{ 
    dup2(fd[1], STANDARD_OUTPUT); 
    printf("Hello World"); 
} 

La stratégie est très pratique si vous souhaitez utiliser une bibliothèque tiers au sein de votre application iPhone. Cependant, un problème est que le débogage standard utilisant printf() n'est plus disponible. Dans mon projet, j'ai simplement dirigé toutes les sorties de débogage vers l'erreur standard, XCode afficherait les sorties sur sa console.

Répondre

6

Vous ne pouvez pas fork() mais vous pouvez utiliser autant de threads que vous le souhaitez, et maintenant vous avez même GCD sur l'iPhone pour aider à garder l'utilisation du thread raisonnable.

Pourquoi voulez-vous fork() au lieu de simplement utiliser plus de threads?

+0

Vous avez raison. J'essayais d'utiliser fork() parce que c'était la pratique standard sous UNIX. De plus, si nous printf() dans un processus différent, cela n'affecterait pas le processus fils. L'iPhone ne le permet pas, j'ai donc décidé de passer à plusieurs threads. – SmallChess

4

Non. Vous ne pouvez pas non plus exec. Vous avez 1 processus.