www.nico.schottelius.org/software/cinit/browse_source/cinit-0.0.4/old/msg_change_status.c01

50 lines
1.1 KiB
Plaintext

/*
* (c) 2005 Nico Schottelius (nico-linux at schottelius.org)
* change status of a service
* part of cinit
*/
#include <string.h>
#include <unistd.h>
#include "cinit.h"
int do_change_status(char *svc, char status, pid_t pid, int action)
{
char buf = CMD_CHG_STATUS;
int tmp = strlen(svc);
ssize_t (*fpoint)(int,void* ,size_t);
if(action == ACT_READ)
fpoint = read;
else
fpoint = write;
D_PRINTF("versuche status zu aendern");
if(write(sock,&buf,1) == -1) { /* write COMMAND */
perror("write");
return 0;
}
if(write(sock,&tmp,sizeof(tmp)) == -1) { /* write length */
perror("write");
return 0;
}
if(write(sock,svc,tmp) == -1) { /* write service name */
perror("write");
return 0;
}
if(write(sock,&buf,1) == -1) { /* write PID */
perror("write");
return 0;
}
write(sock,&status,sizeof(status)); /* write status */
D_PRINTF("fertig mit schreiben");
read(sock,&buf,sizeof(buf)); /* read SID or -1 if error */
return buf;
}