zeus
4 years ago
16 changed files with 260 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||
#!/bin/sh |
|||
|
|||
fifo=/tmp/testpipe |
|||
rm -f $fifo |
|||
mkfifo -m a=rw $fifo |
Binary file not shown.
@ -0,0 +1,28 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <fcntl.h> |
|||
#include <sys/stat.h> |
|||
#include <sys/types.h> |
|||
#include <unistd.h> |
|||
|
|||
|
|||
char *phrase = "My child sent me this!!"; |
|||
|
|||
int main() |
|||
{ |
|||
int fd[2], bytesread; |
|||
char message[100]; |
|||
|
|||
pipe(fd); |
|||
|
|||
if (fork()==0) { |
|||
close(fd[0]); |
|||
write (fd[1],phrase,strlen(phrase)+1); |
|||
close(fd[1]); |
|||
} else { |
|||
close(fd[1]); |
|||
bytesread=read(fd[0],message,100); |
|||
printf("Read %d bytes:%s\n", bytesread, message); |
|||
close(fd[0]); |
|||
} |
|||
} |
Binary file not shown.
@ -0,0 +1,41 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <fcntl.h> |
|||
#include <sys/stat.h> |
|||
#include <sys/types.h> |
|||
#include <unistd.h> |
|||
|
|||
// C program to implement one side of FIFO
|
|||
// This side reads first, then writes
|
|||
int main() |
|||
{ |
|||
int fd1; |
|||
|
|||
// FIFO file path
|
|||
char * myfifo = "/tmp/myfifo"; |
|||
|
|||
// Creating the named file(FIFO)
|
|||
// mkfifo(<pathname>,<permission>)
|
|||
mkfifo(myfifo, 0666); |
|||
|
|||
char str1[80], str2[80]; |
|||
while (1) |
|||
{ |
|||
// First open in read only and read
|
|||
fd1 = open(myfifo,O_RDONLY); |
|||
read(fd1, str1, 80); |
|||
|
|||
// Print the read string and close
|
|||
printf("User1: %s\n", str1); |
|||
close(fd1); |
|||
|
|||
// Now open in write mode and write
|
|||
// string taken from user.
|
|||
fd1 = open(myfifo,O_WRONLY); |
|||
fgets(str2, 80, stdin); |
|||
write(fd1, str2, strlen(str2)+1); |
|||
close(fd1); |
|||
} |
|||
return 0; |
|||
} |
|||
|
@ -0,0 +1,7 @@ |
|||
#!/bin/sh |
|||
|
|||
for i in `seq 10 30`; do |
|||
echo $i |
|||
sleep 1 |
|||
done > /tmp/testpipe |
|||
|
@ -0,0 +1,7 @@ |
|||
#!/bin/sh |
|||
|
|||
|
|||
for i in `seq 10 30`; do |
|||
echo "allo programma: $i " |
|||
sleep 1 |
|||
done > /tmp/testpipe |
@ -0,0 +1,7 @@ |
|||
#!/bin/sh |
|||
|
|||
for i in `seq 10 30`; do |
|||
echo $i > /tmp/testpipe |
|||
sleep 1 |
|||
done |
|||
|
Binary file not shown.
@ -0,0 +1,49 @@ |
|||
#include <stdio.h> |
|||
#include <string.h> |
|||
#include <fcntl.h> |
|||
#include <sys/stat.h> |
|||
#include <sys/types.h> |
|||
#include <unistd.h> |
|||
|
|||
// C program to implement one side of FIFO
|
|||
// This side writes first, then reads
|
|||
|
|||
int main() |
|||
{ |
|||
int fd; |
|||
|
|||
// FIFO file path
|
|||
char * myfifo = "/tmp/myfifo"; |
|||
|
|||
// Creating the named file(FIFO)
|
|||
// mkfifo(<pathname>, <permission>)
|
|||
mkfifo(myfifo, 0666); |
|||
|
|||
char arr1[80], arr2[80]; |
|||
while (1) |
|||
{ |
|||
// Open FIFO for write only
|
|||
fd = open(myfifo, O_WRONLY); |
|||
|
|||
// Take an input arr2ing from user.
|
|||
// 80 is maximum length
|
|||
fgets(arr2, 80, stdin); |
|||
|
|||
// Write the input arr2ing on FIFO
|
|||
// and close it
|
|||
write(fd, arr2, strlen(arr2)+1); |
|||
close(fd); |
|||
|
|||
// Open FIFO for Read only
|
|||
fd = open(myfifo, O_RDONLY); |
|||
|
|||
// Read from FIFO
|
|||
read(fd, arr1, sizeof(arr1)); |
|||
|
|||
// Print the read message
|
|||
printf("User 2: %s\n", arr1); |
|||
close(fd); |
|||
} |
|||
return 0; |
|||
} |
|||
|
Binary file not shown.
@ -0,0 +1,57 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <pthread.h> |
|||
|
|||
void *print_message_function( void *ptr ); |
|||
|
|||
int main() |
|||
{ |
|||
pthread_t thread1, thread2; |
|||
char *message1 = "Thread 1"; |
|||
char *message2 = "Thread 2"; |
|||
int iret1, iret2; |
|||
|
|||
/* Create independent threads each of which will execute function */ |
|||
|
|||
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); |
|||
iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); |
|||
|
|||
/*
|
|||
Arguments: |
|||
thread - returns the thread id. (unsigned long int defined in bits/pthreadtypes.h) |
|||
attr - Set to NULL if default thread attributes are used. |
|||
void * (*start_routine) - pointer to the function to be threaded. Function has a single argument: pointer to void. |
|||
*arg - pointer to argument of function. To pass multiple arguments, send a pointer to a structure. |
|||
|
|||
The following is a list of "thread attributes" and their default values |
|||
Attribute Default Meaning of default |
|||
contentionscope PTHREAD_SCOPE_PROCESS Thread will compete for resources within the process |
|||
detachstate PTHREAD_CREATE_JOINABLE Thread is joinable by other threads |
|||
stackaddr NULL Workspace (stack) used by thread is allocated (reserved) by the operating system |
|||
stacksize NULL Workspace size used by thread is determined by the operating system |
|||
priority 0 Priority of the thread (the lower the priority value, the higher the priority...) |
|||
policy SCHED_OTHER The scheduling policy is determined by the system |
|||
inheritsched PTHREAD_EXPLICIT_SCHED scheduling policy and parameters are not inherited but explicitly defined by the attribute object |
|||
guardsize PAGESIZE size of guard area for a thread's created stack (this area will help determine if the thread has exceeded the total amount of space that was allocated for the thread) |
|||
|
|||
See https://man7.org/linux/man-pages/man3/pthread_create.3.html
|
|||
*/ |
|||
|
|||
/* Wait till threads are complete before main continues. Unless we */ |
|||
/* wait we run the risk of executing an exit which will terminate */ |
|||
/* the process and all threads before the threads have completed. */ |
|||
|
|||
pthread_join( thread1, NULL); |
|||
pthread_join( thread2, NULL); |
|||
|
|||
printf("Thread 1 returns: %d\n",iret1); |
|||
printf("Thread 2 returns: %d\n",iret2); |
|||
pthread_exit(NULL); |
|||
} |
|||
|
|||
void *print_message_function( void *ptr ) |
|||
{ |
|||
char *message; |
|||
message = (char *) ptr; |
|||
printf("%s \n", message); |
|||
} |
@ -0,0 +1 @@ |
|||
gcc -pthread -o CreationTermination CreationTermination.c |
Binary file not shown.
@ -0,0 +1,57 @@ |
|||
#include<stdio.h> |
|||
#include<string.h> |
|||
#include<pthread.h> |
|||
#include<stdlib.h> |
|||
#include<unistd.h> |
|||
|
|||
pthread_t tid[2]; |
|||
int ret1,ret2; |
|||
|
|||
void* doSomeThing(void *arg) |
|||
{ |
|||
unsigned long i = 0; |
|||
pthread_t id = pthread_self(); |
|||
|
|||
for(i=0; i<(4294967295);i++); |
|||
|
|||
if(pthread_equal(id,tid[0])) |
|||
{ |
|||
printf("\n First thread processing done\n"); |
|||
ret1 = 1; |
|||
pthread_exit(&ret1); |
|||
} |
|||
else |
|||
{ |
|||
printf("\n Second thread processing done\n"); |
|||
ret2 = 2; |
|||
pthread_exit(&ret2); |
|||
} |
|||
|
|||
return NULL; |
|||
} |
|||
|
|||
int main(void) |
|||
{ |
|||
int i = 0; |
|||
int err; |
|||
int *ptr[2]; |
|||
|
|||
while(i < 2) |
|||
{ |
|||
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL); |
|||
if (err != 0) |
|||
printf("\ncan't create thread :[%s]", strerror(err)); |
|||
else |
|||
printf("\n Thread created successfully\n"); |
|||
|
|||
i++; |
|||
} |
|||
|
|||
pthread_join(tid[0], (void**)&(ptr[0])); |
|||
pthread_join(tid[1], (void**)&(ptr[1])); |
|||
|
|||
printf("\n return value from first thread is [%d]\n", *ptr[0]); |
|||
printf("\n return value from second thread is [%d]\n", *ptr[1]); |
|||
|
|||
return 0; |
|||
} |
@ -0,0 +1 @@ |
|||
gcc -pthread -o CreationTermination1 CreationTermination1.c |
Loading…
Reference in new issue