Пример #1
0
int main(int argc, const char *argv[])
{
    if(argc!=2)
    {
        perror("\nIncorrect Usage!\n\tUse: Consumer [delay]\n\n\t\tWhere [delay] is sleeping time in secs.");
        exit(EXIT_FAILURE);
    }
    int *shared_buffer = create_shared_mem_buffer();
    int semid = create_semaphore_set();
    
    char item;
    int delay=atoi(argv[1]);
    printf("\n--Configuration-------------------------------\n");
    printf("Delay: %d\n",delay);
    while(1) {
        semop(semid, &downFull, 1);
        semop(semid, &downMutex, 1);
        item = remove_item(semid, shared_buffer);
        //debug_buffer(shared_buffer);
        semop(semid, &upMutex, 1);
        semop(semid, &upEmpty, 1);
        consume_item(item);
        sleep(delay);
    } 
    
    return EXIT_SUCCESS;
}
Пример #2
0
int main(int argc, char *argv[])
{
	char filename[MAXSIZE];
	char word1[MAXSIZE], word2[MAXSIZE];
	
        int semid = create_semaphore_set();

	int fifo;
	
	if ((fifo = open("myfifo1", O_RDONLY)) < 0) {
	       printf("open: pipe doesn't exist");
	        exit(-1);
	}
	
        read(fifo, filename, MAXSIZE);
        printf("filename: %s\n", filename);
        read(fifo, word1, MAXSIZE);
        printf("word1: %s\n", word1);
        read(fifo, word2, MAXSIZE);
        printf("word2: %s\n", word2);
	
	close(fifo);
	
	char arg[100];
	
	strcat(arg, "s/");
	strcat(arg, word1);
	strcat(arg, "/");
	strcat(arg, word2);
	strcat(arg, "/g");

        semop(semid, &Wait, 1);
	// execv for sed
	if (fork() == 0) {
		execlp("sed", "sed", "-i", arg, filename, NULL);
	}
	wait(NULL);
        semop(semid, &Signal, 1);
        semop(semid, &signal1, 1);
	
	return 0;
}
Пример #3
0
int main(int argc, char *argv[])
{
	if (argc < 2) {
		printf("format: %s <filename>\n", argv[0]);
		exit(-1);
	}
	char filename[MAXSIZE];
	strcpy(filename, argv[1]);
	char word1[MAXSIZE], word2[MAXSIZE], word3[MAXSIZE];
	
        int semid = create_semaphore_set();
	
	scanf("%s", word1);
	scanf("%s", word2);
	scanf("%s", word3);
	
	
	int fifo1, fifo2;

	remove("myfifo1");
	remove("myfifo2");

	if (mkfifo("myfifo1", 0600))
	{
	        printf("mkfifo: error creating named pipe");
		exit(-1);
	}

	if((fifo1 = open("myfifo1", O_WRONLY)) < 0) {
	        printf("open: pipe doesn't exist");
	        exit(-1);
	}
	if (fork() == 0) {
		execlp("./p2", "./p2", NULL);
	}
	write(fifo1, filename, MAXSIZE);
	printf("P1: Sending filename to P2\n");

	write(fifo1, word1, MAXSIZE);
	printf("P1: Sending word1 to P2\n");
	write(fifo1, word2, MAXSIZE);
	printf("P1: Sending word2 to P2\n");
	
	close(fifo1);
	
	if (mkfifo("myfifo2", 0600))
	{
	        printf("mkfifo: error creating named pipe");
		exit(-1);
	}

	if((fifo2 = open("myfifo2", O_WRONLY)) < 0) {
	        printf("open: pipe doesn't exist");
	        exit(-1);
	}
	if (fork() == 0) {
		execlp("./p3", "./p3", NULL);
	}
	write(fifo2, filename, MAXSIZE);
	printf("P1: Sending filename to P3\n");

	write(fifo2, word3, MAXSIZE);
	printf("P1: Sending word3 to P3\n");
	
	close(fifo2);
	

	semop(semid, &wait1, 1);
	semop(semid, &wait2, 1);
	
	execlp("cat", "cat", filename, NULL);

	return 0;
}