Quote:
What shell are you using? what is your OS?
linux; now i'm using ubuntu instaled on windows and i sure hope that don't make me any problem
---------- Post updated at 02:28 AM ---------- Previous update was at 02:26 AM ----------
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
int main(int argc, char *argv[])
{
FILE *out;
int i;
int mutex, empty, full;
char buffer_sir_citit [100];
struct sembuf sem_down, sem_up;
mutex = semget(26, 1, 0666 | IPC_CREAT | O_EXCL);
if (mutex <= 0)
{
if (errno == EEXIST) mutex = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 1;
if (semctl(mutex, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat mutex \n");
return(1);
}
}
empty = semget(35, 1, 0666 | IPC_CREAT | O_EXCL);
if (empty <= 0)
{
if (errno == EEXIST) empty = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 1;
if (semctl(empty, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat empty \n");
return(1);
}
}
full = semget(42, 1, 0666 | IPC_CREAT | O_EXCL);
if (full <= 0)
{
if (errno == EEXIST) full = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 0;
if (semctl(full, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat full \n");
return(1);
}
}
sem_down.sem_num = 0;
sem_down.sem_op = -1; /* P() */
sem_down.sem_flg = SEM_UNDO;
sem_up.sem_num = 0;
sem_up.sem_op = 1; /* P() */
sem_up.sem_flg = SEM_UNDO;
while (1)
{
scanf("%s\n", buffer_sir_citit);
semop(empty, &sem_down, 1);
semop(mutex, &sem_down, 1);
out = fopen("file.out","w");
if (out<0)
{
printf("Nu exista fisierul \n");
exit(1);
}
fprintf(out, "%s\n", buffer_sir_citit);
fclose(out);
semop(mutex, &sem_up, 1);
semop(full, &sem_up, 1);
}
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
int main()
{
FILE *out;
int i;
int mutex, empty, full;
char buffer_sir_citit [100];
struct sembuf sem_down, sem_up;
mutex = semget(26, 1, 0666 | IPC_CREAT | O_EXCL);
if (mutex <= 0)
{
if (errno == EEXIST) mutex = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 1;
if (semctl(mutex, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat mutex \n");
return(1);
}
}
empty = semget(35, 1, 0666 | IPC_CREAT | O_EXCL);
if (empty <= 0)
{
if (errno == EEXIST) empty = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 1;
if (semctl(empty, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat empty \n");
return(1);
}
}
full = semget(42, 1, 0666 | IPC_CREAT | O_EXCL);
if (full <= 0)
{
if (errno == EEXIST) full = semget(1356, 1, 0666);
else
{printf("fail to get semaphore"); exit(1);}
}
else
{
union semun sem_union;
sem_union.val = 0;
if (semctl(full, 0, SETVAL, sem_union) == -1)
{
printf("nu s-a initializat full \n");
return(1);
}
}
sem_down.sem_num = 0;
sem_down.sem_op = -1; /* P() */
sem_down.sem_flg = SEM_UNDO;
sem_up.sem_num = 0;
sem_up.sem_op = 1; /* P() */
sem_up.sem_flg = SEM_UNDO;
while (1)
{
semop(full, &sem_down, 1);
semop(mutex, &sem_down, 1);
out = fopen("file.out","r");
if (out<0)
{
printf("Nu exista fisierul \n");
exit(1);
}
fscanf(out, "%s\n", &buffer_sir_citit);
fclose(out);
semop(mutex, &sem_up, 1);
semop(empty, &sem_up, 1);
printf("%s\n", buffer_sir_citit);
}
}
---------- Post updated at 02:30 AM ---------- Previous update was at 02:28 AM ----------
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
int main(int argc, char *argv[])
{
int s;
struct sembuf sem_b;
s = semget(1356, 1, 0666 | IPC_CREAT);
union semun sem_union;
sem_union.val = 1;
if (semctl(s, 0, SETVAL, sem_union) == -1)
{
printf("Nu exista fisierul \n");
return(1);
}
exit(0);
}
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *out;
int i;
out = fopen("file.out","w");
if (argc>1)
for (i=1; i<argc; i++)
fprintf(out, "%s\n", argv[i]);
fclose(out);
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
(Linux-specific) */
};
int main(int argc, char *argv[])
{
int fisier;
int i;
int s;
struct sembuf sem_b;
s = semget(1356, 1, 0666 | IPC_CREAT);
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = SEM_UNDO;
if (semop(s, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed\n");
return(1);
}
fisier = open("file.out", O_WRONLY);
if (fisier<0)
{
printf("Nu exista fisierul \n");
exit(1);
}
if (argc>1)
for (i=1; i<argc; i++)
{
write(fisier, argv[i], strlen(argv[i]));
write(fisier, "\n", 1);
}
close(fisier);
exit(0);
}