Loading...
More C Posts
#include <stdio.h>#include <stdlib.h>// give an array of identical coins (ints), represented by 1's and one 2// we can find the heavy coin (2) by summing the contents of the thirdsint sum_subarr(int arr[], int l, int r){int sum = 0;for(int i = l; i <= r; i++){sum += arr[i];}return sum;}int heavy_coin(int arr[], int l, int r){if(r == l){return r;}int midl = l + (r - l)/3;int midr = r - (r - l)/3;int lw = sum_subarr(arr, l, midl);int mw = sum_subarr(arr, midl + 1, midr);if ( lw > mw ){return heavy_coin(arr, l, midl);}else if ( lw < mw ){return heavy_coin(arr, midl + 1, midr);}else{return heavy_coin(arr, midr + 1, r);}}int main(int argc, char *argv[]){int arr[] = {1,1,1,1,2,1,1,1,1};int l = 0;int r = 8;int res = -1;res = heavy_coin(arr, l, r);printf("Hevy coin is at index: %d\n", res);return EXIT_SUCCESS;}
#include <stdio.h>#include <stdlib.h>int main(){int * int_ptr;int_ptr = (int *)malloc(2*sizeof(int));if(!int_ptr) {printf("Something went wrong while allocating memory. Exiting...");exit(1);}printf("Enter first integer: ");scanf("%i", &int_ptr[0]);printf("Enter second integer: ");scanf("%i", &int_ptr[1]);printf("Original values: 1st = %i 2nd = %i\n",int_ptr[0], int_ptr[1]);int_ptr[0] = int_ptr[0] ^ int_ptr[1];//printf("%i\n", int_ptr[0]);int_ptr[1] = int_ptr[0] ^ int_ptr[1];//printf("%i\n", int_ptr[1]);int_ptr[0] = int_ptr[0] ^ int_ptr[1];//printf("%i\n", int_ptr[0]);printf("Swapped values: 1st = %i 2nd = %i\n", int_ptr[0], int_ptr[1]);free(int_ptr);exit(0);}
// Server side implementation of UDP client-server model#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#define PORT 8008#define MAXLINE 1024// Driver codeint main(){int sockfd;char buffer[MAXLINE];char *hello = "Hello from server";struct sockaddr_in servaddr, cliaddr;// Creating socket file descriptorif ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));memset(&cliaddr, 0, sizeof(cliaddr));// Filling server informationservaddr.sin_family = AF_INET; // IPv4servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(PORT);// Bind the socket with the server addressif ( bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0 ){perror("bind failed");exit(EXIT_FAILURE);}int len, n;len = sizeof(cliaddr); //len is value/resultn = recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, ( struct sockaddr *) &cliaddr, &len);buffer[n] = '\0';printf("Client : %s\n", buffer);sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);printf("Hello message sent.\n");return 0;}
//===============replaceString.c===============#include "replaceString.h"//Normally I'd make a replaceStringMalloc to return a malloced string or a replaceStringMut to change the original string, but I'm not satisfied with those function names so it's best just to do to = (char*)malloc(replaceStringLength(from, replace, replacement)); replaceString(to, from, replace, replacement);//If this was c++, I'd have no problem just overloading replaceString//Returns the length of the resulting string (minus the null char)size_t replaceStringLength(const char* from, const char* replace, const char* replacement){size_t fromLength = strlen(from);size_t replaceLength = strlen(replace);size_t replacementLength = strlen(replacement);size_t fromEndIt = 0;size_t toLength = 0;while(fromEndIt < fromLength){int replaceIt = 0;while(replaceIt < replaceLength && (fromEndIt+replaceIt) < fromLength && from[fromEndIt + replaceIt] == replace[replaceIt]){++replaceIt;}if(replaceIt == replaceLength){//Update from buffer iterator positionstoLength += (fromEndIt + replacementLength);from += (fromEndIt + replaceLength);fromEndIt = 0;continue;}++fromEndIt;}toLength += fromEndIt;return toLength;}//Baller replaceString by Leif Messinger//Needs null terminated from, replace, and replacement strings as well as a large block of memory to store the result.void replaceString(char* to, const char* from, const char* replace, const char* replacement){size_t fromLength = strlen(from);size_t replaceLength = strlen(replace);size_t replacementLength = strlen(replacement);size_t fromEndIt = 0;while(fromEndIt < fromLength){int replaceIt = 0;while(replaceIt < replaceLength && (fromEndIt+replaceIt) < fromLength && from[fromEndIt + replaceIt] == replace[replaceIt]){++replaceIt;}if(replaceIt == replaceLength){//Copy the string before the matched bitmemcpyToAndShiftPointers(to, from, fromEndIt);//Copy the replacement toomemcpyToAndShiftPointer(to, replacement, replacementLength);//Update from buffer iterator positionsfrom += replaceLength;fromEndIt = 0;continue; //I don't want this thing to get incremented again}++fromEndIt;}//Copy the rest of the unmatched stringmemcpyToAndShiftPointer(to, from, fromEndIt);to[0] = '\0'; //Should work}//===============replaceString.h===============#ifndef REPLACE_STRING_H#define REPLACE_STRING_H#include <string.h>#define memcpyToAndShiftPointer(to,from,n); memcpy((to),(from),(n)); (to) += (n);#define memcpyToAndShiftPointers(to,from,n); memcpy((to),(from),(n)); (to) += (n); (from) += n;//Normally I'd make a replaceStringMalloc to return a malloced string or a replaceStringMut to change the original string, but I'm not satisfied with those function names so it's best just to do to = (char*)malloc(replaceStringLength(from, replace, replacement)); replaceString(to, from, replace, replacement);//If this was c++, I'd have no problem just overloading replaceString//Returns the length of the resulting string (minus the null char)size_t replaceStringLength(const char* from, const char* replace, const char* replacement);//Baller replaceString by Leif Messinger//Needs null terminated from, replace, and replacement strings as well as a large block of memory to store the result.void replaceString(char* to, const char* from, const char* replace, const char* replacement);#endif//===============replaceStringMain.c===============#include <stdio.h>#include <stdlib.h>#include "replaceString.h"#define BUFFER_SIZE (1<<21) //About a mebibyte//There could be matches between buffers, so make sure the buffer size you set it to is good enough for your application. Basically as big as your input.//Replaces strings from sdtin, then outputs it to stdout//./a.out [[replace], [replacement]]...int main(int argc, char** argv){char* buffer1 = (char*) malloc(BUFFER_SIZE);char* buffer2 = (char*) malloc(BUFFER_SIZE);if(buffer1 == NULL || buffer2 == NULL){perror("You need a couple MBs of ram my boy");return 1;}while(!feof(stdin)){fread(buffer1, BUFFER_SIZE, 1, stdin);char* activeBuffer = buffer1;char* inactiveBuffer = buffer2;char* tmp;for(size_t i = 1; (i + 1) < argc; i += 2){//puts(activeBuffer);replaceString(inactiveBuffer, activeBuffer, argv[i], argv[i+1]);//Swap bufferstmp = activeBuffer;activeBuffer = inactiveBuffer;inactiveBuffer = tmp;}fputs(activeBuffer, stdout);}free(buffer1);free(buffer2);return 0;}
// Server side implementation of UDP client-server model#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#define PORT 8008#define RECIEVE_BUFFER_SIZE 1024const char* responseMessage = "Hello from server";// Driver codeint main() {//Create a UDP socket//int socket(int domain, int type, int protocol);//Domain is the place where the data goes. AF_BLUETOOTH, AF_INET6, AF_UNIX is local communication between different programs//Type is the type of connection, so connection based (TCP), connectionless (UDP) or somewhere in between or beyond//Protocol is an enum or flags that give some more options specific to that type. For SOCK_STREAM, you can force it to use SCTP instead of TCP. For SOCK_RAW, it can give you control over the ip frame, and even the ethernet frame.//So this function makes a file descriptor to an IPV4 UDP 'connection' with no options.int sockfd = socket(AF_INET, SOCK_DGRAM, 0);// Creating socket file descriptorif ( sockfd < 0) {perror("socket creation failed");exit(EXIT_FAILURE);}struct sockaddr_in serverAddress;memset(&serverAddress, 0, sizeof(serverAddress));// Filling server informationserverAddress.sin_family = AF_INET; // IPv4serverAddress.sin_addr.s_addr = INADDR_ANY;serverAddress.sin_port = htons(PORT);// Bind the socket with the server addressif(bind(sockfd, (const struct sockaddr*)&serverAddress, sizeof(serverAddress))){ //Bind returns 0 if succeeded, or -1 if failed. -1 is still true.perror("bind failed");exit(EXIT_FAILURE);}struct sockaddr_in clientAddress; unsigned int clientAddressSize = sizeof(clientAddress);memset(&clientAddress, 0, clientAddressSize);char buffer[RECIEVE_BUFFER_SIZE];int bytesRecieved = recvfrom(sockfd, (char*)buffer, RECIEVE_BUFFER_SIZE, MSG_WAITALL, (struct sockaddr*) &clientAddress, &clientAddressSize); //sets clientAddress to the client's address and the new sizebuffer[bytesRecieved] = '\0';printf("Client : %s\n", buffer);sendto(sockfd, (const char*)responseMessage, strlen(responseMessage), MSG_CONFIRM, (const struct sockaddr*) &clientAddress, clientAddressSize);printf("Hello message sent.\n");return 0;}
#include <stdio.h>#include <sys/types.h>#include <unistd.h>int glbvar = 6;int main() {int locvar = 88;pid_t pid;printf("Before fork()\n");if ((pid = fork()) == 0) {/* child */glbvar++;locvar++;} else if (pid > 0) {/* parent */sleep(2);} elseperror("fork error");printf("pid=%d, glbvar=%d, locvar=%d\n", getpid(), glbvar, locvar);return 0;} /* end main */